一个内衬来访问perl中的数组元素?

jav*_*y79 1 perl

我有以下内容:

my @path = split( "/", getcwd );
my $grandParent = $path[-2];
Run Code Online (Sandbox Code Playgroud)

我想在一行(就像在其他语言中)那样做,因为我不再使用@path,就像这样:

my $grandParent = split( "/", getcwd )[-2];
Run Code Online (Sandbox Code Playgroud)

这可能吗?如果是这样,怎么样?

编辑:只是要清楚 - 我从哪里运行脚本我知道有些东西将是不变的(目录结构,名称等).话虽这么说,验证很好,但在这种情况下比它的价值更加混乱; 感谢那些提交错误检查解决方案的人.

zig*_*don 6

将拆分结果放在临时列表中:

my $grandParent = (split( "/", getcwd ))[-2];
Run Code Online (Sandbox Code Playgroud)


rub*_*ots 5

应该:

use Cwd;
...

my $grandParent = ( split '/', getcwd ) [-2];
Run Code Online (Sandbox Code Playgroud)

附录: 另一种方式(不知何故更多'perlish'):

...

my ($parent, $grandParent) = reverse split qr{/}, getcwd();
Run Code Online (Sandbox Code Playgroud)

(考虑到tchrist的一些好建议)

附录2: 一些评论:

有时,可能根本没有$grandparent目录.如果在Unix系统'/'的根目录中使用,上面将导致:

 $parent = undef;
 $grandParent = undef;
Run Code Online (Sandbox Code Playgroud)

如果在'/'正下方的目录中,例如.'/ somedir',

 $parent = 'somedir';
 $grandParent = ''; # empty string
Run Code Online (Sandbox Code Playgroud)

所以你可以检查那个条件.此外,reverse 反转了分割路径元素的顺序,因此您需要查看(现在)前两个元素以了解您的位置.

问候

RBO

  • @ javamonkey79:zigdons响应实际上是第一个,如果我没记错的话他会快10秒钟... (3认同)