免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5450 | 回复: 5
打印 上一主题 下一主题

请教:关于"Use of uninitialized value" [复制链接]

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-20 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-28 11:18 |只看该作者 |倒序浏览
大家好,我最近在写Perl程序的时候遇到一个问题。这里写了一小段代码用来验证,麻烦请教一下,谢谢!
  1. #!/usr/bin/perl -w
  2. use strict;
  3. my @array = qw/ file1 file2 /;  #定义两个文件
  4. foreach (@array) {
  5.         open FILE, "< $_" or die $!;  #使用默认控制变量"$_"
  6.         while (<FILE>) {
  7.                 print;  #输出文件的每一行
  8.         }
  9. }
  10. print "@array\n";  #打印文件列表
复制代码
执行程序,运行到最后提示:"Use of uninitialized value in join or string at a.pl line 10, <FILE> line 2."
根据提示是@array数组没定义,后来尝试换一种写法就可以通过。
  1. #!/usr/bin/perl -w
  2. use strict;
  3. my @array = qw/ file1 file2 /;  #定义两个文件
  4. my $file;  #定义控制变量
  5. foreach $file (@array) {
  6.         open FILE, "< $file" or die $!;  #使用自定义控制变量"$file"
  7.         while (<FILE>) {
  8.                 print;  #输出文件的每一行
  9.         }
  10. }
  11. print "@array\n";  #打印文件列表
复制代码
我个人的理解是,执行while循环的时候,Perl会保留foreach循环的"$_"变量的值,当while结束的时候还原"$_"变量。
为什么提示"Use of uninitialized value",麻烦请教一下,谢谢!

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
2 [报告]
发表于 2011-05-28 11:40 |只看该作者
$_是全局变量,最后@array = ( undef, undef );

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-20 06:20:00
3 [报告]
发表于 2011-05-28 11:52 |只看该作者
$_是全局变量,最后@array = ( undef, undef );
yybmsrs 发表于 2011-05-28 11:40


"$_"虽说是全局变量,但Perl不是会保留其原先的值,然后再还原么?
@array为何到最后变成undef了呢?

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
4 [报告]
发表于 2011-05-28 12:07 |只看该作者
foreach里面有$_,while里面也有$_,都是同一个$_,怎么保留和还原呢?

while读文件时读到eof后,会继续读直到失败退出,这个值就是undef

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
5 [报告]
发表于 2011-05-28 12:56 |只看该作者
我记得前几天有个一模一样的问题

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-20 06:20:00
6 [报告]
发表于 2011-05-31 17:44 |只看该作者
本帖最后由 hrbeu06ws 于 2011-05-31 17:45 编辑
foreach里面有$_,while里面也有$_,都是同一个$_,怎么保留和还原呢?

while读文件时读到eof后,会继续读直 ...
yybmsrs 发表于 2011-05-28 12:07


while读取文件到最后,然后退出。为什么会影响最后一句print @array的结果呢?第二种写法为什么就可以通过呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP