-l $_在Perl中做了什么,它是如何工作的?
嵌套代码的含义是什么?
foreach (@items) { if (-l $_) ## this is what I don't understand: the meaning of -l { ... } } 谢谢你的帮助. 解决方法
让我们看看每件事:
foreach (@items) { ... } 这个for循环(foreach和for是Perl中的相同命令)从@items列表中获取每个项目,并将其设置为$_. $_是Perl中的一个特殊变量,用作默认变量的一种.这个想法是你可以做这样的事情: foreach (@items) { s/foo/bar/; uc; print; } 并且每个命令都会对$_变量进行操作!如果你只是说没有别的东西打印,它会打印$_中的任何内容.如果你说uc并没有提到变量,它会大写$_中的任何内容. 由于几个原因,现在不鼓励这样做.首先,$_是全局的,因此可能存在无意的副作用.例如,假设您调用的子程序的值为$_.您会突然惊讶于您的程序不起作用. 另一个-l是一个test操作符.此运算符检查给定的文件是否为符号链接.我已经链接到解释所有测试操作符的Perldoc. 如果您不熟悉Unix或BASH / Korn / Bourne shell脚本,那么使用以破折号开头的命令看起来很奇怪.但是,Perl的大部分语法都被盗了……我的意思是借用Unix shell和awk命令.在Unix中,有一个名为test的命令,您可以这样使用: if test -L $FILE then .... fi 在Unix中,-L是test命令的参数,在Unix中,命令的大多数参数都以短划线开头. Perl只是借用了相同的语法破折号和所有. 有趣的是,如果您为这些测试命令读取Perldoc,您会注意到,与foreach循环一样,如果您没有给它变量或文件名,各种测试命令将使用$_变量.编写该脚本的人可以像这样编写循环: foreach (@items) { if (-l) ## Notice no mention of the `$_` variable { ... } } 是的,那太清楚了! 只是为了您的信息,许多Perl专家(咳嗽Damian Conway咳嗽)推荐的现代方法是尽可能避免$_变量,因为它不会真正增加清晰度并可能导致问题.他还建议只说和忘记foreach,并在同一行使用花括号: for my $file (@items) { if ( -l $file ) { ... } } 这可能对-l命令没有帮助,但至少你可以看到你正在处理文件,所以你可能会怀疑-l与文件有关. 不幸的是,Perldoc将所有这些文件测试放在-X部分下并按字母顺序排列在X下,所以如果你在Perldoc中搜索-l命令,或者用破折号开头的任何命令,你将找不到它,除非你懂.但是,至少你现在知道将来在哪里看到这样的东西:-s $file. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |