将字符串拆分为数组会导致空数组
Splitting string into an array results in an empty array
对于此脚本,用户可以像这样以 csv 格式输入他们想要用作命令行参数 ($opt_proj
) 的项目:Proj1,Proj2,Proj3
我想将它们分开以单独获取每个,但我不确定为什么 split
命令不会用项目填充我的数组。
代码:
my @projects;
if ( defined $opt_proj ) {
print $opt_proj;
my @projects=split /,/,$opt_proj;
}
print "@projects\n";
exit;
$opt_proj
包含数据并打印出 Proj1,Proj2,Proj3
。
但是,@projects
似乎是空的。我还尝试使用 foreach
循环打印 @projects
的内容,结果相同。
问题是scope。只需删除 if
块中的 my
关键字:
use warnings;
use strict;
my $opt_proj = 'Proj1,Proj2,Proj3';
my @projects;
if ( defined $opt_proj ) {
print $opt_proj, "\n";
@projects=split /,/,$opt_proj;
}
print "@projects\n";
exit;
这会打印:
Proj1,Proj2,Proj3
Proj1 Proj2 Proj3
您的代码在 if
块内创建了一个新变量 @projects
,在块外无法看到。
对于此脚本,用户可以像这样以 csv 格式输入他们想要用作命令行参数 ($opt_proj
) 的项目:Proj1,Proj2,Proj3
我想将它们分开以单独获取每个,但我不确定为什么 split
命令不会用项目填充我的数组。
代码:
my @projects;
if ( defined $opt_proj ) {
print $opt_proj;
my @projects=split /,/,$opt_proj;
}
print "@projects\n";
exit;
$opt_proj
包含数据并打印出 Proj1,Proj2,Proj3
。
但是,@projects
似乎是空的。我还尝试使用 foreach
循环打印 @projects
的内容,结果相同。
问题是scope。只需删除 if
块中的 my
关键字:
use warnings;
use strict;
my $opt_proj = 'Proj1,Proj2,Proj3';
my @projects;
if ( defined $opt_proj ) {
print $opt_proj, "\n";
@projects=split /,/,$opt_proj;
}
print "@projects\n";
exit;
这会打印:
Proj1,Proj2,Proj3
Proj1 Proj2 Proj3
您的代码在 if
块内创建了一个新变量 @projects
,在块外无法看到。