回答
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. 這個C語句做了什麼?
- 3. 這個SELECT語句做什麼?
- 4. 這個MySQL語句做了什麼?
- 5. 這對於require語句做了什麼?
- 6. 這個Erlang語句做了什麼?
- 7. 這個jQuery語句在做什麼?
- 8. 什麼關鍵字限制條件做這個CREATE TABLE語句
- 9. 這條sql語句有什麼問題
- 10. 這條SQL語句產生了什麼?
- 11. 這條SQL語句有什麼問題?
- 12. 這條件語句有什麼問題?
- 13. 這條SQL語句有什麼問題
- 14. 這條SQL語句有什麼問題?
- 15. RegEx語句在做什麼?
- 16. 我需要做些什麼來糾正這個SQL語句?
- 17. 這個if語句不起作用 - 我做錯了什麼?
- 18. 我在這裏做錯了什麼? IF和其他語句
- 19. (anObject *)在語句前做了什麼?
- 20. @在SQL語句中做什麼?
- 21. &符(「&」)在put語句中做了什麼?
- 22. Perl中這兩個打印語句有什麼區別? if語句在做什麼?
- 23. 這條Javascript線是做什麼用的?
- 24. c:這條線是做什麼的?
- 25. 這兩條sql語句有什麼區別
- 26. 爲什麼編譯器不能優化這兩條語句?
- 27. 爲什麼這個條件語句不適用於NSUserDefault?
- 28. 這條語句(line,str)= str.split(「\ n」,1)是什麼意思?
- 29. 這條SQL語句的含義是什麼?
- 30. 爲什麼while循環中的這條語句從未執行?
請顯示包含此聲明的實際腳本。 – kennytm 2010-08-25 07:14:10
從腳本中加入一些更多的代碼,以便正確理解使用context()的代碼。 – 2010-08-25 07:14:59