亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2873 | 回復(fù): 7
打印 上一主題 下一主題

證明空列表在 SCALAR 上下文返回 undef [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-03-01 20:45 |只看該作者 |倒序?yàn)g覽
  1. #!/bin/env perl

  2. use strict;
  3. no warnings;

  4. my $i  = (1, 2, 3, ());
  5. my $j  = (1, 2, 3, );
  6. my $k = (1, 2, 3, func());

  7. print "\$i = $i\n";
  8. print "\$j = $j\n";
  9. print "\$k = $k\n";

  10. my @ar = (1, 2, 3, func());
  11. print "Size of \@ar: ", scalar(@ar), "\n";

  12. my @ar2 = (1, 2, 3, func2());
  13. print "Size of \@ar2: ", scalar(@ar2), "\n";

  14. sub func
  15. {
  16.         return;
  17. }

  18. sub func2
  19. {
  20.         return undef;
  21. }
復(fù)制代碼

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
2 [報告]
發(fā)表于 2011-03-01 22:49 |只看該作者
錯了。

建議學(xué)學(xué) C 語言,看看 Perl 解釋器的實(shí)現(xiàn)。

perldoc -f wantarray
perldoc -f return

上面兩段文檔可以解釋除 my $i = 這一行之外的其余所有代碼。

這一行代碼的解釋在下面:
  1. D:\MoChou>perl -MO=Deparse -e "$i = (1,2,3,())"
  2. $i = ('???', '???', '???', ());
  3. -e syntax OK

  4. D:\MoChou>
復(fù)制代碼

論壇徽章:
7
巳蛇
日期:2014-04-10 08:54:57白羊座
日期:2014-04-22 20:06:262015年亞洲杯之沙特阿拉伯
日期:2015-02-10 14:18:532015年辭舊歲徽章
日期:2015-03-03 16:54:152015亞冠之吉達(dá)阿赫利
日期:2015-06-02 11:34:112015亞冠之武里南聯(lián)
日期:2015-06-24 12:13:082015亞冠之阿爾納斯?fàn)?日期:2015-08-03 09:08:25
3 [報告]
發(fā)表于 2011-03-01 23:23 |只看該作者
回復(fù) 1# 黑色陽光_cu

證明這個,只需要一行就夠了:
  1. perl -E 'my $i = (); say "defined" if defined $i'
復(fù)制代碼

論壇徽章:
0
4 [報告]
發(fā)表于 2011-03-02 00:25 |只看該作者
錯了。

建議學(xué)學(xué) C 語言,看看 Perl 解釋器的實(shí)現(xiàn)。

perldoc -f wantarray
perldoc -f return

上 ...
flw 發(fā)表于 2011-03-01 22:49



{:3_187:}

我主要就是測試 my $i  = (1, 2, 3, ()) 其它都是為了對比而已。

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
5 [報告]
發(fā)表于 2011-03-02 01:06 |只看該作者
這個對比恰恰說明了你的邏輯不清楚 or 認(rèn)識不到位。
完全不一樣的東西,你單獨(dú)把 () 拿出來說事兒(如同三樓一樣),也許還是一個命題,
但把它和 return 放在一起,不得不讓人懷疑你對上下文的理解以及 return 的行為是否有誤。

另外,即使你測出了 () 的作用,也難以稱它是“空列表在 SCALAR 上下文”中的行為。
恰恰相反,當(dāng)時的 () 位于 LIST 上下文。

至于 () 在 () 中嵌套時的行為,用 B:Terse 或者 B:Deparse 都可以比較清楚地觀察到。

論壇徽章:
0
6 [報告]
發(fā)表于 2011-03-02 03:44 |只看該作者
本帖最后由 黑色陽光_cu 于 2011-03-02 03:58 編輯
這個對比恰恰說明了你的邏輯不清楚 or 認(rèn)識不到位。
完全不一樣的東西,你單獨(dú)把 () 拿出來說事兒(如同三 ...
flw 發(fā)表于 2011-03-02 01:06



LIST 上下文?
  1. #!/bin/env perl

  2. use strict;
  3. no warnings;

  4. my $i  = (1, 2, 3, ());
  5. my $j  = (1, 2, 3, probe());

  6. sub probe
  7. {
  8.         my $rt = wantarray();
  9.         if (not defined $rt)
  10.         {
  11.                 print "VOID\n";
  12.         }
  13.         elsif (not $rt)
  14.         {
  15.                 print "SCALAR\n";
  16.         }
  17.         else
  18.         {
  19.                 print "LIST\n";
  20.         }

  21.         return;
  22. }
復(fù)制代碼

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
7 [報告]
發(fā)表于 2011-03-02 08:12 |只看該作者
你又把 () 和 foo() 混為一談了。

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
8 [報告]
發(fā)表于 2011-03-02 08:18 |只看該作者
記住,上下文是傳遞的。
  1. D:\MoChou>perl -MO=Terse -e "$i = (1,2,3,())"
  2. LISTOP (0x1935a3c) leave [1]
  3.     OP (0x1935a20) enter
  4.     COP (0x1935a60) nextstate
  5.     BINOP (0x1935a9c) sassign
  6.         LISTOP (0x1935b18) list
  7.             OP (0x1935afc) pushmark
  8.             OP (0x1935b5c) null [5]
  9.             OP (0x1935b3c) null [5]
  10.             OP (0x1935adc) null [5]
  11.             OP (0x1935ac0) stub
  12.         UNOP (0x1935b7c) null [15]
  13.             PADOP (0x1935b9c) gvsv  GV (0x1830e54) *i
  14. -e syntax OK

  15. D:\MoChou>perl -MO=Terse -e "$i = (1,2,3,foo())"
  16. LISTOP (0x19359b8) leave [1]
  17.     OP (0x193599c) enter
  18.     COP (0x19359dc) nextstate
  19.     BINOP (0x1935a18) sassign
  20.         LISTOP (0x1935b18) list
  21.             OP (0x1935afc) pushmark
  22.             OP (0x1935b5c) null [5]
  23.             OP (0x1935b3c) null [5]
  24.             OP (0x1935adc) null [5]
  25.             UNOP (0x1935a3c) entersub [3]
  26.                 UNOP (0x1935a78) null [141]
  27.                     OP (0x1935a5c) pushmark
  28.                     UNOP (0x1935a9c) null [17]
  29.                         PADOP (0x1935abc) gv  GV (0x1830e18) *foo
  30.         UNOP (0x1935b7c) null [15]
  31.             PADOP (0x1935b9c) gvsv  GV (0x1830e54) *i
  32. -e syntax OK

  33. D:\MoChou>
復(fù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP