Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 将多个值传递给命令行参数并将其存储为数组_Perl_Getopt Long - Fatal编程技术网

Perl 将多个值传递给命令行参数并将其存储为数组

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'

我正在尝试向命令行参数传递多个值,如-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  
我试图获得用户提供的这些系统命令,这些命令直接进入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;