下面的陈述究竟说了什么?
my @dirs = qw(fred|flintstone <barney&rubble> betty );
完整的故事是:
my $tarfile = "something*wicked.tar";
my @dirs = qw(fred|flintstone <barney&rubble> betty );
system "tar", "cvf", $tarfile, @dirs;
这取自 Learning Perl ,第4版。
system command
将在shell上运行的结果是:
tar cvf fred|flintstone <barney&rubble> betty
但是这个命令在unix上有意义吗?
答案 0 :(得分:5)
qw/STRING/
Evaluates to a list of the words extracted out of STRING, using
embedded whitespace as the word delimiters. It can be understood
as being roughly equivalent to:
split(' ', q/STRING/);
the differences being that it generates a real list at compile
time, and in scalar context it returns the last element in the
list. So this expression:
qw(foo bar baz)
is semantically equivalent to the list:
'foo', 'bar', 'baz'
答案 1 :(得分:4)
qw()
通过空格(空格,制表符,任意数量)将括号中的字符串拆分并返回一个列表:"fred|flintstone", "<barney&rubble>", "betty"
编辑:来自@kemp的提示:它返回一个列表
现在回答您的最新问题:
tar cvf fred|flintstone <barney&rubble> betty
是的,字符|
,<
,>
和&
在Linux中有意义:
|
将标准输出从tar cvf fred
重定向到flintstone
的标准输入。
<
将文件barney
发送到flintstone
的标准输入
&
运行上一个命令并将其发送到后台
>
将rubble
的标准输出写入文件betty
整行是否有意义,取决于个别程序。
答案 2 :(得分:3)
它会创建以下值的列表:
fred|flinstone
<barney&rubble>
betty
并将其分配给数组@dirs
。
qw
代表“引用词”,因此它会创建一个使用空格作为分隔符给出的值列表。
关于您的编辑:unix命令tar
创建给定文件的存档。
cvf
是控制其行为的标志:
c - create archive
v - verbose mode
f - use following argument as archive name
接下来是要保存存档的文件的名称,以及要包含在其中的其他文件的列表。
答案 3 :(得分:2)
您可以使用Data :: Dumper查看dirs的样子:
$ perl -e 'use Data::Dumper; my @dirs = qw(fred|flintstone <barney&rubble> betty ); print Dumper(@dirs);'
$VAR1 = 'fred|flintstone';
$VAR2 = '<barney&rubble>';
$VAR3 = 'betty';
或者感谢Eugene:
$ perl -e 'use Data::Dumper; my @dirs = qw(fred|flintstone <barney&rubble> betty ); print Dumper \@dirs;'
$VAR1 = [
'fred|flintstone',
'<barney&rubble>',
'betty'
];
哪个更好!
Quote_and_Quote_like_Operators也很有帮助。它提醒qq qw等。