我是perl的新手。
目前,我的任务是遍历文件夹中的所有.htm文件,并做两件事:
在我的perl脚本中,我提出了这两行:
@pub=`ls $sourceDir | grep '\.htm' | grep -v Default | head -550`;
foreach (@pub) {
my $docName = $_;
chomp($docName);
$docName =~ s/.htm$//g;
$docName =~ s/ /_/g;
....}
$ docName是保存文件当前全名的变量(包括扩展名)。有趣的是,那两个$ docName替换语句,在任何时候,只有上面的一个工作。例如,这里的示例代码只会替换扩展名但不会占用空格,但如果我注释掉第一个,那么空白区域会完全变为下划线,但扩展名仍为“.htm”。
专家可以帮助我吗?还可以建议我哪里出错了?提前谢谢!
答案 0 :(得分:2)
你确定全部是
吗?$docName =~ s/.htm$//g;
正在做什么?
您需要转义.
并添加替换字符串。你也不需要g
,因为右锚确保它只能发生一次。
$docName =~ s/\.htm$/\.xml/;
除此之外,你应该没事。
答案 1 :(得分:0)
尝试:
my @pub = grep { ! /Default/ } glob( '*.htm' );
for my $pub ( @pub ){
$pub =~ s{ \. htm \z }{}msx;
$pub =~ s{ \s+ }{_}gmsx;
print "$pub\n";
}
请参阅:
perldoc -f glob
perldoc -f grep
perldoc perlretut
perldoc perlre