使用下面的代码,我想删除最后的.log
。根据 perlrequick ,我似乎正在做正确的事情。我在哪里陷入困境?
test.pl
my $file = "ooout.log";
print $file."\n";
my $file =~ s/\.log//g;
print $file."\n";
输出
$ perl test.pl
ooout.log
$
答案 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
。