我的名字是路易斯,住在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.
答案 0 :(得分:6)
您看到的输出不是来自print语句,而是ls
的控制台输出。要将ls
输出转换为变量,请使用反引号:
my $ls = `ls`;
my @lsarray = split(/\s+/, $ls);
print "$lsarray[1]\n";
这是因为exec
没有返回,后面的语句没有被执行。来自perldoc:
exec函数执行系统命令,永不返回;使用 如果你想要它返回,系统而不是exec。它失败并返回 仅当命令不存在且直接执行时才为false 而不是通过系统的命令shell
但是使用system
命令对你没有帮助,因为它不允许输出捕获,因此,反引号。但是,使用glob
函数更好:
my @arr = glob("*");
print $arr[1], "\n";
此外,perl数组索引从0开始,而不是1.要获取file1.pl,您应该使用print "$lsarray[0]\n"
。
答案 1 :(得分:3)
当您在Perl中编写内容时,使用shell是不好的做法。
此程序显示我认为您想要的内容。
chdir '/home/labs-perl' or die $!;
my @dir = glob '*';
print "@dir\n";
修改强>
我刚刚从perreal的帖子中了解了你需要的东西。
要显示当前工作目录中的第一个文件,只需写入
即可print((glob '*')[0], "\n");
答案 2 :(得分:0)
print <*> // die("No file found\n"), "\n";
(尽管如果脚本会做更多的事情,通常应该避免在标量上下文中使用迭代器。)