这个Perl更换有什么问题?

时间:2010-09-07 18:32:55

标签: perl

使用下面的代码,我想删除最后的.log。根据 perlrequick ,我似乎正在做正确的事情。我在哪里陷入困境?

  

test.pl

my $file = "ooout.log";
print $file."\n";
my $file =~ s/\.log//g;
print $file."\n";
  

输出

$ perl test.pl
ooout.log

$

6 个答案:

答案 0 :(得分:12)

您正在重新声明my $file - 删除my前缀以解决此问题。如果您使用

启动脚本,则会捕获此信息
use strict;
use warnings;

你会看到:

"my" variable $file masks earlier declaration in same scope at

答案 1 :(得分:8)

其他人已经使用my指出了您的问题。

我想请注意,您的替换代码与您的规范不完全匹配。 它将从文件名中删除所有出现的字符串.log

如果您只想删除字符串末尾的.log,请不要使用g修饰符,并使用字符串结尾锚$:< / p>

use strict;
use warnings;

my $file = "ooout.logical.log";
print "$file\n";
$file =~ s/\.log$//;
print "$file\n";

__END__

ooout.logical.log
ooout.logical

答案 2 :(得分:3)

尝试从替换行中删除my

$file =~ s/\.log//g;

您似乎正在重新初始化$file

答案 3 :(得分:0)

删除第二个my,然后它就可以了。

my(稍微简化)声明一个 new 变量。您声明$file两次,因此第二个my使perl忘记了第一个中的值。

答案 4 :(得分:0)

你在第三行说“我的$文件”,所以你要定义另一个变量。

尝试:

my $file = "ooout.log";
print $file."\n";
$file =~ s/\.log//g;
print $file."\n";

答案 5 :(得分:0)

第二个my