一段小代码中的一个uninitialized value的问题,困扰已久,谢谢

一段小代码中的一个uninitialized value的问题,困扰已久,谢谢

我是一个perl新手,写了一个程序,用于将一个文本文件中的不同行取出,保存在另几个文件中。但是运行时,总提示我:“Use of uninitialized value in pattern match (m//) at split_file line 16.“

这个小问题困扰我几天了,尽管代码能较好的完成它的任务。

代码如下:
1   #! usr/bin/perl -w
2   
3   use strict;
4   open(SOURCE,"<xiaozhu");
5   my @content=<SOURCE>;
6   close SOURCE;
7   my $i=0;
8   my $z=1;
9   while($i<@content){
10  open(DEST,">result$z");
11  if($content[$i]=~/^>/){
12  print DEST "$content[$i]";
13  while($content[$i+1]=~/^\w/){
14  print DEST "$content[$i+1]";
15  $i++;
16  if($i==@content){
17  last;} #inner if
18  } # inner while
19  close DEST;
20  } # outer if
21  $i++;
22  $z++;
23  } # outer while


不知为何提示我“Use of uninitialized value in pattern match (m//) at split_file line 16.”

不甚感激!

举例补充一下:
这段代码用于将文本文件“xiaozhu”,内容如:
>11
AAAAAAAAAATTTTTTTTTTTT
TTTTTTTCCCCCCCCCCCCC
>22
CCCCCCCCCCCGGGGGGGGGGGG
TTTAAAAAAAAAAAGGGGGCCCCCC
拆分为两个文件,分别为:“result1”文件
>11
AAAAAAAAAATTTTTTTTTTTT
TTTTTTTCCCCCCCCCCCCC
和“result2”文件
>22
CCCCCCCCCCCGGGGGGGGGGGG
TTTAAAAAAAAAAAGGGGGCCCCCC

请指点!谢谢!


[Copy to clipboard] [ - ]
CODE:
open(SOURCE,"<xiaozhu") or die 'error open file';

文件如果找开错了后面什么都是空的
有人又在伪造错误信息或者源代码。
这代码真是整齐啊!

下面的循环挂掉了

13  while($content[$i+1]=~/^\w/){   ### Oops!
14  print DEST "$content[$i+1]";
15  $i++;
16  if($i==@content){ ### 当$i == $#content时, 跳到13行, 导致错误提示
17  last;} #inner if
18  } # inner while


看你的意思是要把
>11
AAAAAAAAAATTTTTTTTTTTT
TTTTTTTCCCCCCCCCCCCC
>22
CCCCCCCCCCCGGGGGGGGGGGG
TTTAAAAAAAAAAAGGGGGCCCCCC
...
>nn
...
...

拆分到n个文件中去?



QUOTE:
原帖由 flw 于 2007-10-10 21:46 发表
有人又在伪造错误信息或者源代码。

貌似我只是提个编程习惯上的建议 code又不是引用
谢谢Lonki,我的确是要拆分一个文件到多个文件中。
按照你的提示,问题现在解决了。
谢谢!
拆分:


my $str = q/
>11
AAAAAAAAAATTTTTTTTTTTT
TTTTTTTCCCCCCCCCCCCC
>22
CCCCCCCCCCCGGGGGGGGGGGG
TTTAAAAAAAAAAAGGGGGCCCCCC
>33
CCCCCCCCCCCGGGGG
AAAAAAG
/;

while ($str =~ /(>.*?)(?=>|$)/sg) {
    print "$1\n\n";
}
这时候通常可以用 range operator
看的我好吃力。。。。
真是太整齐了。。