我试图将多个值作为-cmd'cp abc def''ls abd / def / ghi'等传递给命令行参数,并希望将它们分别存储为数组的元素。我可以将其转换为字符串并使用split函数。我正在尝试使用GetOptions实现相同的目的。我不确定它提供数组大小的原因。请帮我解决一下这个。
use strict;
use warnings;
use Getopt::Long;
my( $cmd ,$pro, $dom );
GetOptions ( 'pro=s' => \$pro ,
'dom=s' => \$dom ,
'cmd=s@{1,}' => \$cmd );
print $pro."\n".@$cmd."\n".$dom."\n" ;
-->./abc.pl -pro JKFK -cmd 'ls abc/bcd/def' 'cp abn/cdf ads' -dom ABC
Expected:
JKFK
['ls abc/bcd/def','cp abn/cdf ads']
ABC
Actual Results :
JKFK
2
ABC
我试图获取用户提供的这些系统命令,并将这些命令直接转到数据库表。我试图将这些系统命令作为数组中的一个元素存储,以便于解析和插入数据库表中。 请帮助我将它们放入数组。
谢谢。
答案 0 :(得分:5)
您要在标量上下文中评估数组:
print $pro."\n".@$cmd."\n".$dom."\n"
尝试:
print $pro."\n@$cmd\n".$dom."\n"
换句话说,使用内插,对于数组,其等效于join($", @array)
-其中$"
默认为空格。这意味着您可以使用以下内容:
print $pro."\n".join(' ', @$cmd)."\n".$dom."\n"
答案 1 :(得分:1)
您的输出方法不会以任何方式在您想要的输出中显示括号。
print join("\n", $pro, "[ '" . join("', '", @$cmd) . "' ]", $dom, "");
或
use Data::Dump; # This is a CPAN module that's not normally installed by default
dd $pro, $cmd, $dom;