正如Igor Chubin在Call a bash script from a perl script中所述,从perl脚本中检索bash脚本结果的一种方法是:
$result = `/bin/bash /path/to/script`;
现在,我的结果实际上是一系列文件,因为这个脚本运行一个简单的find命令。控制台上的结果如下:
/path/to/file.extension
/path/to/file2.extension
我想获取结果,删除空格,并连接用逗号分隔的文件名。所以我的$result
看起来像:
/path/to/file.extension,/path/to/file2.extension
最有效的方法是什么?请注意,这是在perl脚本中进行的。
答案 0 :(得分:1)
chomp($result);
$result =~ tr|\n|,|; # replace every newline with comma
$result =~ s|\s+||g; # remove whitespaces
答案 1 :(得分:1)
foreach my $file ( split(/\s+/,$result) ) {
$file=~s/\s+//g;
push(@array,$file);
}
print join(",",@array)
写完之后,我想提一下,如果你的脚本正在调用一个找到的shell脚本,我建议你查看File :: Find perl模块并在Perl中完成整个过程。
答案 2 :(得分:0)
你有一个这样的字符串:
file_list = "file_1
file_2
file_3
file_4"
并且您想将其更改为逗号分隔。
my $comma_separated_list = join ", ", split( /\n/, $nl_separated_file_list );
在两个单独的命令中(可能更容易看到):
my @file_array = split /\n/, $nl_separated_file_list;
my $comma_separated_list = join ", ", $nl_separated_file_list;
split将生成一个数组(每行一个。连接将生成一个逗号分隔的字符串。这里的示例将产生:
$ comma_separated_list =“file1,file2,file3,file4,...”;
如果您不想要空格,请在联接", "
中将其保留。
可以使用正则表达式(用\n
替换,
的每个瞬间)来执行此操作,但我怀疑这比连接/拆分需要更长的时间。