3

我想知道如何使用 perl 脚本而不是命令行替换字符串。我通过网络搜索并尝试了以下内容。

我有一个文件:

> cat temp
this is one
>

我有一个我写的下面的脚本:

> cat temp.pl
#!/usr/bin/perl -i.bak
use strict;
use warnings;
my @ARGV=('temp');
$^I = '.bak';
my %hash=("one"=>"1");
{
    while (<>) {
        s/(one)/$hash{$1}/g;
        print;
    }
}
exit;

但是当我尝试执行(>perl temp.pl)它时它只是挂起并且文件也没有得到更新。我正在使用的 perl 版本是 5.8.4 命令行 thing( perl -pi -e 's/one/1/g' temp) 也可以完美运行。我做错了什么吗?

4

1 回答 1

4

你需要改变 global @ARGV,并用my你做词法@ARGV

use strict;
use warnings;

@ARGV=('temp');

$^I = '.bak';
my %hash=("one"=>"1");
while (<>) {
        s/(one)/$hash{$1}/g;
        print;
}
于 2013-09-25T07:03:59.957 回答