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

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

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 3586 | 回復(fù): 10
打印 上一主題 下一主題

奇怪的參數(shù)檢查 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-06-05 10:00 |只看該作者 |倒序?yàn)g覽
我寫(xiě)了一個(gè)2000行以上的.pm庫(kù)文件和100多行的.pl接口文件管理配置文件。在pm庫(kù)文件中有一個(gè)函數(shù)在定義之前使用時(shí)函數(shù)工作不太正常。

在b.pl運(yùn)行時(shí)沒(méi)有發(fā)現(xiàn)任何警告,也不提示輸入?yún)?shù)錯(cuò)誤。大家能告訴我原因么?

文件結(jié)構(gòu)如下:
  1. a.pm
  2. use strict;
  3. use warnings;
  4. use Data::Dumper;

  5. sub f()
  6. {
  7. my @arr = ();
  8. g(@arr);
  9. print Dumper(@arr);
  10. }

  11. sub ff()
  12. {
  13. my @arr = ();
  14. g(\@arr);
  15. print Dumper(@arr);
  16. }

  17. sub g(\@)
  18. {
  19. my $arr = shift;

  20. push @{$arr}, 12;
  21. }

  22. sub gf()
  23. {
  24. my @arr = ();
  25. g(@arr);
  26. print Dumper(@arr);
  27. }

  28. sub gff()
  29. {
  30. my @arr = ();
  31. g (\@arr); # 報(bào)錯(cuò)
  32. print Dumper(@arr);
  33. }
  34. 1;

  35. b.pl:
  36. use strict;
  37. use warnings;
  38. use a;

  39. f(); #無(wú)輸出
  40. ff(); #輸出12
  41. gf(); #輸出12
  42. gff(); #編譯錯(cuò)誤
復(fù)制代碼

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
2 [報(bào)告]
發(fā)表于 2010-06-05 11:49 |只看該作者
g 用了原型,
所以調(diào)用時(shí)直接 g(@arr) 即可,
不需要也不能 g(\@arr)。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2010-06-05 11:55 |只看該作者
回復(fù) 2# flw
謝謝回復(fù)

現(xiàn)在最大的問(wèn)題是ff()為什么檢查不出來(lái)?而且還工作正常的樣子?

是因?yàn)闆](méi)有原型的時(shí)候需要必須自己處理引用的轉(zhuǎn)換么?

有沒(méi)有文檔專(zhuān)門(mén)說(shuō)明這種問(wèn)題?

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2010-06-05 13:02 |只看該作者

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
5 [報(bào)告]
發(fā)表于 2010-06-05 13:17 |只看該作者
因?yàn)?ff 還沒(méi)見(jiàn)到原型。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2010-06-05 17:26 |只看該作者
回復(fù) 4# 黑色陽(yáng)光_cu
多謝

問(wèn)題已解決。

函數(shù)原型不是強(qiáng)制的,在一些特定情況下函數(shù)會(huì)被當(dāng)作舊格式的函數(shù)。如果
函數(shù)被當(dāng)作無(wú)原型的舊函數(shù)時(shí),函數(shù)請(qǐng)求的輸入?yún)?shù)是引用,這就可以
解釋我的函數(shù)為什么出錯(cuò)了。

再次感謝兩位的幫助。

BTW:有沒(méi)有什么方法徹底禁用無(wú)原型的舊格式的函數(shù)的使用?至少報(bào)出一個(gè)
警告?我覺(jué)得如果老是出這種問(wèn)題的話(huà),調(diào)試起來(lái)相當(dāng)些麻煩,而且很難找到
出錯(cuò)原因

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2010-06-05 18:07 |只看該作者
回復(fù)  黑色陽(yáng)光_cu
多謝

問(wèn)題已解決。

函數(shù)原型不是強(qiáng)制的,在一些特定情況下函數(shù)會(huì)被當(dāng)作舊格式的 ...
feiliang1983 發(fā)表于 2010-06-05 17:26



   
把參數(shù)原型提前說(shuō)明

use strict;
use warnings;
use Data::Dumper;

sub g(\@);        # here

sub f()
{
my @arr = ();
g(@arr);
print Dumper(@arr);
}

sub ff()
{
my @arr = ();
g(\@arr);
print Dumper(@arr);
}

sub g(\@)
{
my $arr = shift;

push @{$arr}, 12;
}

sub gf()
{
my @arr = ();
g(@arr);
print Dumper(@arr);
}

sub gff()
{
my @arr = ();
g (\@arr); # 報(bào)錯(cuò)
print Dumper(@arr);
}

f(); #無(wú)輸出
ff(); #輸出12
gf(); #輸出12
gff(); #編譯錯(cuò)誤

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2010-06-05 18:32 |只看該作者
本帖最后由 黑色陽(yáng)光_cu 于 2010-06-05 18:39 編輯

更奇怪的是用prototype("inner")檢查原型

  1. use strict;
  2. use warnings;

  3. # sub inner(\@);

  4. sub outer()
  5. {
  6.         my $prototype = prototype("inner");
  7.         if (defined $prototype)
  8.         {
  9.                 print "Subrounte inner's prototype is: $prototype\n";
  10.         }

  11.         inner();
  12. }

  13. sub inner(\@)
  14. {
  15.         ;
  16. }

  17. outer();
復(fù)制代碼
明明可以檢查到原型是\@了,但下面的inner()不工作,一定要把原型聲明前置。結(jié)論就是prototype少用為妙

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2010-06-05 18:49 |只看該作者
本帖最后由 黑色陽(yáng)光_cu 于 2010-06-05 19:05 編輯

而且用&調(diào)用函數(shù)不會(huì)被檢查原型~~~


http://www.perl.com/language/misc/fmproto.html#Prototype_Bugs
  1. use strict;
  2. use warnings;

  3. BEGIN
  4. {
  5.         warn prototype("proc");
  6. }

  7. sub proc(\@)
  8. {
  9.         print "proc\n";
  10. }
復(fù)制代碼

  1. use strict;
  2. use warnings;

  3. sub proc(\@)
  4. {
  5.         print "proc\n";
  6. }

  7. BEGIN
  8. {
  9.         warn prototype("proc");
  10. }



復(fù)制代碼

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2010-06-07 12:01 |只看該作者
回復(fù) 9# 黑色陽(yáng)光_cu

看了一下,感覺(jué)perl的原型系統(tǒng)基本不靠譜。

如果是寫(xiě)一堆功能單一的小文件還可以保證聲明放在文件頭上;對(duì)于一個(gè)羅列了一堆小函數(shù)
而且需要經(jīng)常添加新函數(shù)的大文件聲明基本無(wú)效。開(kāi)始的時(shí)候接口數(shù)目不多,所有函數(shù)堆在
一個(gè)文件了

再次感謝各位前輩
您需要登錄后才可以回帖 登錄 | 注冊(cè)

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP