免费注册 查看新帖 |

Chinaunix

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

一个关于glob的问题,有些不明白 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-08 20:54 |只看该作者 |倒序浏览
  1. #!/usr/bin/perl -w
  2. use 5.010;

  3. my ($j, $k) = ('~/a', '~/b');
  4. $_ = glob $_ for ($j, $k);
  5. say "$j\n$k";
复制代码
输出:
Use of uninitialized value $k in concatenation (.) or string at ./e.pl line 6.
/home/blahblah/a

不明白为什么$k会是未初始化的状态,希望大家帮忙看看

环境:
This is perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-multi

论坛徽章:
0
2 [报告]
发表于 2011-12-09 15:19 |只看该作者
继续在线等……希望知道的能说下

论坛徽章:
0
3 [报告]
发表于 2011-12-09 16:51 |只看该作者
如果老老实实写一个for的循环,是肯定没问题的……在glob之前,$j $k也都是有赋值的;glob那句开始时,将两个变量undef了,然后应该是这句实际上仅仅执行了一次,仅操作了$j的原因吧?

论坛徽章:
0
4 [报告]
发表于 2011-12-09 16:54 |只看该作者
for 循环 中 $_ 的值的变化,就修改了遍历的变量本身。

#!/usr/bin/perl -w
use 5.010;

my ($j, $k) = ('~/a', '~/b');
(my $a = $_) = glob $_ for ($j, $k);
say "$j\n$k";

论坛徽章:
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
5 [报告]
发表于 2011-12-09 17:24 |只看该作者
glob有点特殊,得是list环境

论坛徽章:
0
6 [报告]
发表于 2011-12-09 17:37 |只看该作者
3楼的说法不对,即使是前置的for循环,照样是这个错;而且把glob换成 .' blahblah' 之类的就不会有错

感谢4楼的帮忙,但是我原本的意图就是要修改 $j 和 $k 这两个变量本身

5楼所说的,得是list环境,具体什么意思,能说的详细点吗……谢谢

论坛徽章:
0
7 [报告]
发表于 2011-12-09 17:45 |只看该作者
值的转换,要进行验证,有些不存在的目录,是glob不出来东西的。

#!/usr/bin/perl -w
use 5.010;

my ($j, $k) = ('~/a', '~/b');
for ($j, $k) {
    if (glob $_) {
       $_ = glob $_ ;
    }
}
say "$j\n$k";

论坛徽章:
0
8 [报告]
发表于 2011-12-09 17:52 |只看该作者
根据5楼所说的,结合文档,发现问题了,多谢

($_) = glob $_;

这样结果就对了,glob在标量上下文的求值方法和列表上下文不同

另外7楼说的确实不对,glob只是按csh的规则进行wildcard展开,根本不会关心是不是存在这个东西的,实际上我的家目录下既没有a这个文件也没有b这个文件,但是照样可以展开

论坛徽章:
0
9 [报告]
发表于 2011-12-09 20:52 |只看该作者
本帖最后由 lxsyd 于 2011-12-09 20:56 编辑

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP