Perl 将多个值传递给命令行参数并将其存储为数组
我正在尝试向命令行参数传递多个值,如-cmd'cp abc def'ls abd/def/ghi'等。。。并希望将它们单独存储为数组的一个元素。我可以将其转换为字符串并使用split函数。我正在尝试使用GetOptions实现同样的功能。我不确定它提供数组大小的原因。请帮我做这个Perl 将多个值传递给命令行参数并将其存储为数组,perl,getopt-long,Perl,Getopt Long,我正在尝试向命令行参数传递多个值,如-cmd'cp abc def'ls abd/def/ghi'等。。。并希望将它们单独存储为数组的一个元素。我可以将其转换为字符串并使用split函数。我正在尝试使用GetOptions实现同样的功能。我不确定它提供数组大小的原因。请帮我做这个 use strict; use warnings; use Getopt::Long; my( $cmd ,$pro, $dom ); GetOptions ( 'pro=s'
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
我试图获得用户提供的这些系统命令,这些命令直接进入DB表。我试图将这些系统命令存储为数组中的一个元素,这样就可以很容易地解析并插入到DB表中。
请帮我把它们排成一排
谢谢。您正在标量上下文中计算数组:
print $pro."\n".@$cmd."\n".$dom."\n"
尝试:
换句话说,使用插值,对于数组,插值相当于连接($”,@array)
——其中$”
默认为空格。这意味着您可以使用以下各项:
print $pro."\n".join(' ', @$cmd)."\n".$dom."\n"
您的输出方法不会以任何方式建议您想要的输出中的括号
print join("\n", $pro, "[ '" . join("', '", @$cmd) . "' ]", $dom, "");
或
我试过'cmd=s'=>\$cmd,然后是./abc.pl-pro JKFK-cmd'ls abc/bcd/def;cp abn/cdf ads'-dom ABC之后,我使用了split(“;”,$cmd)生成了一个数组,但我想知道使用getoptions的解决方案以及您的代码。输出是JKFK[ls ABC/bcd/def cp abn/cdf ads]ABC
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;