Perl 在 Windows 上传递参数

perl passing parameters on windows

提问人:onlyf 提问时间:4/7/2017 最后编辑:onlyf 更新时间:4/7/2017 访问量:44

问:

我有以下代码:

$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"

但我没有得到任何结果。有人可以帮忙吗?

Windows Perl 参数 引言

评论


答:

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 $_;
}