我正在尝试写下一个perl脚本,该脚本能够区分我的驱动器的不同标签与特定的标签,然后在该特定驱动器中执行某些操作。
我在Windows XP计算机上运行Active Perl 5.16.3.1603。
这是我写的:
use strict;
$_ = `fsutil fsinfo drives`;
my @drives = split;
my @labels;
for (@drives)
{
push @labels, `label $_`;
}
for (@labels)
{
print "$_\n";
}
最后的for循环是打印检查 我没有得到任何结果。我尝试用另一种方式检查它:
use strict;
$_ = `fsutil fsinfo drives`;
print;
print "\n";
print join "\n", split;
我的结果是:
Drives: C:\ D:\ E:\ G:\
Drives:
C:\ D:\ E:\ G:\
为什么分裂行为不应该如此?
我尝试split " "
,split / /
和split /\s+/
它们都以相同的输出结束。
如果有人知道为什么会这样,以及如何让它消失,请分享 提前谢谢。
答案 0 :(得分:3)
一个hexdump - 正如DavidO所建议的
00000000h: 0D 0A 44 72 69 76 65 73 3A 20 41 3A 5C 00 43 3A ; ..Drives: A:\.C:
00000010h: 5C 00 44 3A 5C 00 45 3A 5C 00 4D 3A 5C 00 0D 0A ; \.D:\.E:\.M:\...
表明你获得了更多(领先/尾随的CrLf)和其他(00而不是20)的空白空间(在Win XP下测试)。
因此,要获得驱动器号列表,正正则表达式可能是更好的方法:
$ my $res = `fsutil fsinfo drives`;
Drives: A:\ C:\ D:\ E:\ M:\
$ $res =~ /\b\w:/g;
$ARRAY1 = [
'A:',
'C:',
'D:',
'E:',
'M:'
];
更新评论: