免费注册 查看新帖 |

Chinaunix

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

Perl 子程序内部变量 和全局变量重名,如何调用全局变量的问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-12 20:56 |只看该作者 |倒序浏览
如下例子

             my $str = "test";


             sub test {
                   my $str = "";
             }

如何在子程序中调用 全局变量$str;

论坛徽章:
0
2 [报告]
发表于 2010-12-12 21:42 |只看该作者
帮你up.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2010-12-12 21:49 |只看该作者
省省吧。

论坛徽章:
0
4 [报告]
发表于 2010-12-12 21:58 |只看该作者
一定要这么调用吗? 把全局变量作为参数传入比较好啊。
如果重名的话,函数只认自己的变量。

论坛徽章:
0
5 [报告]
发表于 2010-12-12 21:59 |只看该作者
如下例子

             my $str = "test";


             sub test {
                   my $str ...
panxinming90 发表于 2010-12-12 20:56



    非要用同名变量的话,可以定义一个package:
  1. package A;

  2. our $var = 123;

  3. sub x {
  4.    my $var = 456;
  5.    print "local variable: ", $var,,"\n";
  6.    print "package variable: ", $A::var,"\n";
  7. }

  8. x;
复制代码

论坛徽章:
0
6 [报告]
发表于 2010-12-12 22:27 |只看该作者
学习了。。。

论坛徽章:
0
7 [报告]
发表于 2010-12-12 23:46 |只看该作者
回复 5# 兰花仙子


   首先感谢你的回答, 使用package 可以。

不过我之所以问这个问题,因为 测试了 while (<>) {} 这个结构位于 sub {} 里面,
在 sub {} 中  直接 my @ARGV,  

但是 测试 whie (<>) 依旧使用的全局 @ARGV,所以就有了这一问。

事例:
  1. sub test {
  2.     my @ARGV = qw/ a b /;
  3.     while (<>) {
  4.       .....  
  5.     }
  6. }
复制代码

论坛徽章:
0
8 [报告]
发表于 2010-12-12 23:55 |只看该作者
回复 7# panxinming90

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP