提问人:onlyf 提问时间:4/7/2017 最后编辑:onlyf 更新时间:4/7/2017 访问量:44
Perl 在 Windows 上传递参数
perl passing parameters on windows
问:
我有以下代码:
$op = shift or die "Usage: rename expr [files]\n";
chomp(@ARGV = <STDIN>) unless @ARGV;
print "$op";
for ( @ARGV )
{
print "$_";
$was = $_;
eval $op;
die $@ if $@;
rename ( $was, $_ ) unless $was eq $_;
}
它在 linux 机器上产生预期的结果,即当我运行时
perl massrenamer.pl 's/\.txt/\.txtla/' *.txt
我得到了适当的结果。我尝试在 Windows 机器上执行同样的事情,并安装 strawberry perl
perl massrenamer.pl 's/\.txt/\.txtla/' *.txt
和
perl massrenamer.pl "s/\.txt/\.txtla/" *.txt
和
perl massrenamer.pl 's/\.txt/\.txtla/' "*.txt"
但我没有得到任何结果。有人可以帮忙吗?
答:
2赞
Nahuel Fouilleul
4/7/2017
#1
Wilcard 扩展是由 shell 完成的,但当参数括在引号之间时则不然,在移植 perl 脚本的 Windows 上有一个模块 Win32::AutoGlob 另请参阅此 SO 问题
快速解决:将 ( @ARGV ) 替换为 ( glob “@ARGV” )
$op = shift or die "Usage: rename expr [files]\n";
chomp(@ARGV = <STDIN>) unless @ARGV;
print "$op";
for ( glob "@ARGV" )
{
print "$_";
$was = $_;
eval $op;
die $@ if $@;
rename ( $was, $_ ) unless $was eq $_;
}
评论