【发布时间】:2020-06-02 07:14:41
【问题描述】:
我正在尝试将参数从一个 Perl 脚本传递到另一个。一些参数包含空格。
我正在读取一个以逗号分隔的文本文件并在逗号上分割每一行。
my ($jockey, $racecourse, $racenum, $hnamenum, $trainer, $TDRating, $PRO) = split(/,/, $line);
逗号分隔的文本文件中的数据如下所示:
AARON LYNCH,WARRNAMBOOL,RACE 1,DAREBIN (8),ERIC MUSGROVE,B,1
当我从父脚本打印出每个变量时,它们看起来很好(如上)。
print "$jockey\n";
print "$racecourse\n";
print "$racenum\n";
print "$hnamenum\n";
print "$trainer\n";
print "$TDRating\n";
print "$PRO\n";
AARON LYNCH
WARRNAMBOOL
RACE 1
DAREBIN (8)
ERIC MUSGROVE
B
1
当我将参数传递给子脚本时(如下),参数传递不正确。
system("perl \"$bindir\\narrative4.pl\" $jockey $racecourse $racenum $hnamenum $trainer $TDRating $PRO");
AARON
LYNCH
WARRNAMBOOL
RACE
1
DAREBIN
(8)
如您所见,$ARGV[0] 变为 AARON,$ARGV[1] 变为 LYNCH,$ARGV[2] 变为 WARRNAMBOOL,以此类推。
我研究了使用 qq、quotemeta 和 Win32::ShellQuote 为参数添加引号,不幸的是,即使我通过 qq{"$jockey"},引号在到达子脚本之前仍然会被剥离,所以它们必须以某种方式受到保护。
我不确定上述任何一个解决方案是否正确,但我很高兴得到纠正。
如果有任何建议,我将不胜感激。提前致谢。
注意:我在 Windows 10 PC 上使用 Strawberry Perl 运行它。 注2:我故意省略了 use strict; & 使用警告;在这些例子中。
父脚本
use Cwd;
$dir = getcwd;
$bin = "bin"; $bindir = "$dir/$bin";
$infile = "FINAL-SORTED-JOCKEY-RIDES-FILE.list";
open (INFILE, "<$infile") or die "Could not open $infile $!\n";
while (<INFILE>)
{
$line = $_;
chomp($line);
my ($jockey, $racecourse, $racenum, $hnamenum, $trainer, $TDRating, $PRO) = split(/,/, $line);
print "$jockey\n";
print "$racecourse\n";
print "$racenum\n";
print "$hnamenum\n";
print "$trainer\n";
print "$TDRating\n";
print "$PRO\n";
system("perl \"$bindir\\narrative4.pl\" $jockey $racecourse $racenum $hnamenum $trainer $TDRating $PRO");
sleep (1);
}
close INFILE;
exit;
子脚本
$passedjockey = $ARGV[0];
$passedracecourse = $ARGV[1];
$passedracenum = $ARGV[2];
$passedhnamenum = $ARGV[3];
$passedtrainer = $ARGV[4];
$passedTDRating = $ARGV[5];
$passedPRO = $ARGV[6];
print "$passedjockey\n";
print "$passedracecourse\n";
print "$passedracenum\n";
print "$passedhnamenum\n";
print "$passedtrainer\n";
print "$passedTDRating\n";
print "$passedPRO\n\n";
【问题讨论】:
-
使用
system的列表版本?
标签: perl arguments parent-child