【发布时间】:2014-02-08 03:45:44
【问题描述】:
我正在尝试编写一个 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 / /和split /\s+/。
它们都以相同的输出结束。
如果有人知道它为什么会发生以及如何让它消失,请分享。
提前致谢。
【问题讨论】:
-
eval.in/91580 看起来不错。
-
当我尝试手动将字符串放入 $_ 时,它起作用了。 $_ = "驱动器:C:\\D:\\E:\\G:\\"
-
对
fsutil fsinfo drives的输出进行十六进制转储,以确认您得到的是实际的空格字符。 -
这在 Windows 7 上运行良好。在命令行上试试这个
perl -MData::Dumper -e"++$Data::Dumper::Useqq; print Dumper $_ = `fsutil fsinfo drives`"