回答
if当且仅当条件为真时执行语句。
unless
是相反的,它执行语句,除非条件为真(即,如果条件为假)。
更多详情参见:http://perldoc.perl.org/perlsyn.html
()仅仅是空列表,所以这段代码被提供的情况下空单的默认值,其中$ some_var是假的(可能是因为$ some_var是不确定的)。
谢谢,我明白'除非'部分 - 但为什么'()'?空列表实现了什么? – Tony 2010-08-25 06:56:57
如果$ some_var为false,它将返回空列表。
如果我写 @s =() unless $some_var;
,如果$some_var
为假,我清空@s
。
这是我能想到的唯一方法。
谢谢 - 对不起,如果我不清楚,但这是全部在一行 - 没有任务。 – Tony 2010-08-25 07:12:49
它可能用于隐式返回,如果$some_var
评估为true,则返回它,否则返回空列表。
+1只有用的答案atm – 2010-08-25 07:08:55
谢谢 - 不知道如何工作,因为它发生在脚本的开始,而不是在子例程中,并且相同的脚本以退出(0)结束; – Tony 2010-08-25 07:10:43
请记住,当一个子程序退出时,返回值是最后处理的值(或者,如果有'return'语句,不管那个'return'语句被调用了什么)。 – 2010-08-25 07:12:01
本身,这个表达式是一个nop。但是如果没有显式的返回语句并且这个值碰巧是块中的最后一个东西,那么值(空列表)可以从子例程或do()块自动返回。
谢谢,我喜欢这个理论......但它接近主程序的顶部,很多东西发生在它之后:-( – Tony 2010-08-25 07:27:47
这里有一些事情正在进行,但最重要的是这种线通常会显示为执行块的最后一行[1]。在这种情况下,块的值是最后执行的语句的值[2]。现在,包含unless
的语句具有左侧的值,如果右侧为true,并且右侧的值为其他值,则这是一种说法“块的值为$some_var
if $some_var
碰巧是真的,否则为()
“。
()
仅仅是空列表,所以这段代码被提供的情况下空单,其中$some_var
是假的默认值(可能是因为$some_var
是不确定的。)
更常用来达到同样的效果与or
,在同等
$some_var or();
放在一起,我们可以看到这些情况:
use strict;
use warnings;
my @x = do {() unless 0 };
my @y = do {() unless 5 };
print "\@x: <@x>\n\@y: <@y>\n";
@x
是空阵列,因为0
为false,而@y
是包含5
的数组,因为5
为true。
除了作为块的最后一个语句之外的任何地方,() unless $some_var;
是无操作的。但是,如果$some_var
未另外提及,它确实会抑制once
警告。
[1]:这是由eval
或do
评估或提供给块(例如)map
或grep
,或作为子程序调用块。
[2]:“最后执行的语句的值”是一个奇怪的短语;大多数只有表达式才有价值但是因为Perl包含了一个概念,即在没有显式返回的情况下,块的值是最后一个语句的值,Perl需要这个奇怪的短语。
谢谢你的详细分析;似乎并不是这里发生的事情(如果任何东西)。这是一个更多的脚本,大量的后续代码被省略,并最终以'exit(0);'结尾:': # - MAIN -------------- -------------------------------------------------- ------- GetOptions( “-interactive”, “-request_file = S”,) 或使用(); 使用,除非($ opt_request_file); (),除非(opt_interactive $); $ today = strftime“。%Y-%m-%d”,localtime; $ dte = strftime“%Y-%m-%d”,localtime; col =(“M”,“N”,“O”,“P”,“Q”,“R”,“S”); 。 。 。 – Tony 2010-08-25 07:31:36
对不起,如果我格式化不好,只需从腻子中剪切和粘贴,在这个文本框中看起来没问题:-( – Tony 2010-08-25 07:35:52
在这种情况下,它对我来说看起来像没有任何作用,猜测交互选项实际上未实现,并且except语句是作为一个代码从未写过的地方持有者,我会毫不犹豫地将其删除 – darch 2010-08-25 07:38:31
解开了谜底:
GetOptions(
"-interactive",
"-request_file=s",
) or usage();
usage unless ($opt_request_file);
() unless ($opt_interactive);
看来 '();'是误导性的 - 它什么都不做,目的只是提一下$ opt_interactive变量......作为一种压制perl警告'Name'$ var“只使用一次”的方法。
感谢所有试图揭露光芒的人!
- 1. 这条语句“Object.prototype”做什么?
- 2. 这个Wix语句在做什么?
- 3. 这个SELECT语句做什么?
- 4. 这个if语句做了什么?
- 5. 这个return语句做了什么?
- 6. 这对于require语句做了什么?
- 7. 这个jQuery语句在做什么?
- 8. 这个MySQL语句做了什么?
- 9. 这个Erlang语句做了什么?
- 10. 这个C语句做了什么?
- 11. 什么关键字限制条件做这个CREATE TABLE语句
- 12. 这两条语句有什么区别?
- 13. 这条语句返回什么$ _SERVER ['SERVER_PROTOCOL']
- 14. 这条SQL语句有什么问题
- 15. 这两条语句有什么区别
- 16. 这条件语句有什么问题?
- 17. 这条sql语句有什么问题
- 18. 这条SQL语句有什么问题?
- 19. 这条SQL语句有什么问题?
- 20. 这条SQL语句产生了什么?
- 21. 为什么这个bash“if”语句执行两条语句
- 22. RegEx语句在做什么?
- 23. 这条线做什么flask.g.auth.logged_in?
- 24. 这条线说什么/做什么?
- 25. 做什么:[]在传递给.send这个Ruby语句时做什么?
- 26. 这条SQLite FULL JOIN语句和WHERE子句有什么错误
- 27. 什么是这条SQL SELECT语句的正确语法
- 28. 这条SQL语句有什么问题 - 语法错误#1064?
- 29. 这个if语句做了什么? (字符串比较)
- 30. 这个复杂的return语句在javascript中做了什么?
请显示包含此声明的实际脚本。 – kennytm 2010-08-25 07:14:10
从脚本中加入一些更多的代码,以便正确理解使用context()的代码。 – 2010-08-25 07:14:59