谁能帮我理解下面这行字的意思?
#!/usr/bin/perl
use File::stat;
...
sub rootdev { return (stat readlink)[0] == (stat "/")[0]; }
my @vols = shuffle map {/.*\/([0-9]+)/} grep {not rootdev} grep {-e readlink} grep {-l} glob("/dev/shm/v/*");
...
有类似上面的子模块,但是我不明白stat readlink)[0] == (stat "/")[0]
的意思。
2条答案
按热度按时间ovfsdjhp1#
( LIST )[ LIST ]
称为列表切片。它返回第一个列表中由第二个列表返回的索引标识的元素。
这表示
( stat ... )[0]
会传回stat
传回的第一个值。内置的
stat
操作符返回文件的信息,它返回了许多值,第一个是文件的设备ID。因此,当使用内置的
stat
时,( stat $path )[0]
返回由$path
指定的文件的设备id。但是,您使用的不是构建的
stat
,而是File::stat中的stat
。在这种情况下,您发布的sub没有任何用处。它实际上执行return 0
,因为它比较的是两个不同对象的内存地址。下面是为使用File:stat的stat
而做的调整:或
最后,令人奇怪的是,sub要求使用
$_
而不是作为参数提供其输入。ukqbszuj2#
我知道答案了。
子模块
rootdev
的输入为grep {-e readlink} grep {-l} glob("/dev/shm/v/*")
。因此,首先从
/dev/shm/v/
目录中获取文件列表,并仅使用grep
过滤符号链接。然后检查设备id(
stat
函数的第一个数组信息),并将其与根设备进行比较。它用于检查
/dev/shm/v
中符号链接的指向设备是否为根设备,以包括或排除任何内容。