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

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

Chinaunix

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

foreach循環(huán)的疑問。 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-05-05 18:39 |只看該作者 |倒序?yàn)g覽
10可用積分
本帖最后由 lucash 于 2010-05-05 18:45 編輯

  1. open AA,"<",$ARGV[0];
  2. open BB,"<",$ARGV[1];

  3. my %hash;

  4. foreach(<AA>){
  5.     chomp;
  6.     my $word = $_;
  7.     foreach(<BB>){
  8.          chomp;
  9.          print "$word ---- $_ \n";
  10.     }
  11. }
復(fù)制代碼
為什么在這里第一個(gè)foreach只循環(huán)了一次就退出了呢?


改成這樣后就成了:

  1. my %hash;
  2. my @word=<AA>;
  3. my @value=<BB>;

  4. foreach $word (@word){
  5.     chomp $word;
  6.     foreach $value(@value){
  7.          chomp $value;
  8.          print "$word ---- $value\n";
  9.     }
  10. }
復(fù)制代碼
但把foreach里的@word替換成@word=<AA>,@value替換成@value=<BB>,又出現(xiàn)了相同的問題
第一個(gè)foreach 又只循環(huán)一次就退出了。

  1. my %hash;
  2. foreach $word (@word = <AA>){
  3.      chomp $word;
  4.      foreach $value (@value = <BB>){
  5.            chomp $value;
  6.            print "$word ---- $value\n";
  7.      }
  8. }
復(fù)制代碼
這是為什么呢?本人初學(xué)perl,希望各位指點(diǎn)指點(diǎn),如果問題太幼稚,還希望各位多多包涵。

最佳答案

查看完整內(nèi)容

我認(rèn)為是這樣的:你OPEN一次文件,只可以通過操作符遍歷一次OPEN的文件內(nèi)容,不能多次重復(fù)遍歷,除非你再OPEN一次。在你第一次用foreach ()遍歷完文件內(nèi)容時(shí),該文件句柄就自動關(guān)閉了,相當(dāng)于close AA了。一樓的第一段代碼的第一個(gè)foreach,并不是象你說的只循環(huán)了一次,而是把的內(nèi)容遍歷了一遍,只不過的第二行是接在的最后一行以后打印,因?yàn)橐呀?jīng)被遍歷了一次,所以在讀第二行時(shí),BB已經(jīng)被關(guān)閉了,所以不再有內(nèi)容輸出。下面的例 ...

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2010-05-05 18:39 |只看該作者
我認(rèn)為是這樣的:
你OPEN一次文件,只可以通過操作符<>遍歷一次OPEN的文件內(nèi)容,不能多次重復(fù)遍歷,除非你再OPEN一次。在你第一次用foreach (<>)遍歷完文件內(nèi)容時(shí),該文件句柄就自動關(guān)閉了,相當(dāng)于close AA了。

一樓的第一段代碼的第一個(gè)foreach,并不是象你說的只循環(huán)了一次,而是把<AA>的內(nèi)容遍歷了一遍,只不過<AA>的第二行是接在<BB>的最后一行以后打印,因?yàn)?lt;BB>已經(jīng)被遍歷了一次,所以在讀<AA>第二行時(shí),BB已經(jīng)被關(guān)閉了,所以不再有內(nèi)容輸出。

下面的例子更容易看懂,Second time后面什么也不會打印,因?yàn)锳A已經(jīng)被關(guān)閉了:
  1. #!/usr/bin/perl

  2. $file1 = "test1.pl";

  3. open AA,"<",$file1;
  4. print "Fist time:\n";
  5. foreach (<AA>) {
  6.         print;
  7. }
  8. print "\n\nSecond time:\n";
  9. foreach (<AA>) {
  10.         print;
  11. }
  12. close AA;

  13. <STDIN>;
復(fù)制代碼
但如果你用@array=<AA>存儲了文件內(nèi)容,那么作為一個(gè)數(shù)組變量,當(dāng)然是可以多次讀取內(nèi)容了。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2010-05-05 18:44 |只看該作者
回復(fù) 1# lucash


    應(yīng)該這樣吧
  1. open AA,"<",$ARGV[0];
  2. my %hash;

  3. foreach(<AA>){
  4.     chomp;
  5.     my $word = $_;
  6.     open BB,"<",$ARGV[1];
  7.     foreach(<BB>){
  8.          chomp;
  9.          print "$word ---- $_ \n";
  10.     }
  11. }
復(fù)制代碼

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2010-05-05 18:46 |只看該作者
回復(fù)  lucash


    應(yīng)該這樣吧
李尋歡92 發(fā)表于 2010-05-05 18:44



    為什么呢?

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2010-05-05 18:50 |只看該作者
為什么要在第一個(gè)foreach塊里打開另外的文件才有行呢?

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2010-05-05 18:57 |只看該作者
回復(fù) 4# lucash


    因?yàn)槟阊h(huán)時(shí)把BB已經(jīng)讀完了,下一次AA循環(huán)就不讀了!

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2010-05-05 19:06 |只看該作者
回復(fù) 5# 李尋歡92


       foreach(<BB>){}

即使在這個(gè)foreach前面打開BB,這個(gè)foreach還是會把BB讀完啊,那為什么卻會進(jìn)行下一個(gè)循環(huán)了呢?

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2010-05-05 19:19 |只看該作者
回復(fù) 6# lucash


    因?yàn)樵谙乱淮窝h(huán)又打開了BB

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2010-05-05 19:36 |只看該作者
    回復(fù) 4# lucash


    因?yàn)槟阊h(huán)時(shí)把BB已經(jīng)讀完了,下一次AA循環(huán)就不讀了!


回復(fù)  lucash


    因?yàn)樵谙乱淮窝h(huán)又打開了BB
李尋歡92 發(fā)表于 2010-05-05 19:19


既然循環(huán)時(shí)把BB讀完了下一次AA循環(huán)就不讀了。那你說的下一次循環(huán)又打開了BB是怎么來的?不是已經(jīng)不讀了么?

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2010-05-05 19:49 |只看該作者
本帖最后由 iamlimeng 于 2010-05-05 19:52 編輯

建議樓主多用print,看輸出了什么,就知道程序究竟是如何運(yùn)作的,比如把代碼改成這樣:
  1. open AA,"<",$ARGV[0];
  2. open BB,"<",$ARGV[1];

  3. foreach(<AA>){
  4.     print;            #加一行,你看見輸出,就知道是怎么回事了
  5.     chomp;
  6.     my $word = $_;
  7.     foreach(<BB>){
  8.          chomp;
  9.          print "$word ---- $_ \n";
  10.     }
  11. }
復(fù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP