Perl系统+拆分+数组

opm*_*tle 2 perl split

我的名字是路易斯,住在arg.我有一个问题,这是无法解决的.

**IN BASH**
pwd
/home/labs-perl
ls
file1.pl file2.pl

**IN PERL**
my $ls = exec("ls");
my @lsarray = split(/\s+/, $ls);
print "$lsarray[1]\n"; #how this, i need the solution. >> file.pl
file1.pl file2.pl # but this is see in shell.
Run Code Online (Sandbox Code Playgroud)

per*_*eal 6

您看到的输出不是来自print语句,而是控制台输出ls.要将ls输出变为变量,请使用反引号:

my $ls = `ls`;
my @lsarray = split(/\s+/, $ls);
print "$lsarray[1]\n";
Run Code Online (Sandbox Code Playgroud)

这是因为exec不返回,后面的语句没有执行.来自perldoc:

exec函数执行系统命令,永不返回; 如果你想让它返回,请使用system而不是exec.它失败并仅在命令不存在时返回false并且它是直接执行而不是通过系统的命令shell执行

但是使用system命令对你没有帮助,因为它不允许输出捕获,因此,反引号.但是,使用glob函数更好:

my @arr = glob("*");
print $arr[1], "\n";
Run Code Online (Sandbox Code Playgroud)

此外,perl数组索引从0开始,而不是1.要获取file1.pl,您应该使用print "$lsarray[0]\n".