我有以下内容:
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)
这可能吗?如果是这样,怎么样?
编辑:只是要清楚 - 我从哪里运行脚本我知道有些东西将是不变的(目录结构,名称等).话虽这么说,验证很好,但在这种情况下比它的价值更加混乱; 感谢那些提交错误检查解决方案的人.
将拆分结果放在临时列表中:
my $grandParent = (split( "/", getcwd ))[-2];
Run Code Online (Sandbox Code Playgroud)
应该:
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
| 归档时间: |
|
| 查看次数: |
1073 次 |
| 最近记录: |