免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: sotol
打印 上一主题 下一主题

问个关于常量访问的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-04-19 14:12 |只看该作者
本帖最后由 hp_truth 于 2010-04-19 14:17 编辑
谢谢,这样的确可以,有没有其他更好的办法可以“用变量的值来访问常量”?
cnncc 发表于 2010-04-19 13:37


那就用Readonly模块吧, 不过这个模块速度要慢一些, Readonly::XS 可以加快点速度
这样可以用符号表来访问变量, 可惜是全局变量.

#!/usr/local/bin/perl5

use warnings;
use strict;
use Readonly;

use constant TUBE => 0;
Readonly our $ELBO => 1;

my %com1 = ("gtype" => "TUBE" );
my %com2 = ("gtype" => "ELBO" );

print "$com1{gtype}\n";   # does not work

no strict "refs";
print ${"main::" . $com2{gtype}}, "\n";  # this is ok

论坛徽章:
0
12 [报告]
发表于 2010-04-19 14:48 |只看该作者
二楼说的不用引号不就可以了吗?
yybmsrs 发表于 2010-04-19 13:51



   
如果这样,还用常量做什么?不多此一举吗?

前面都说了,%com只是一个示例,实际上是不存在的。

或者换个方式说吧:

$gtype 的 值是 TUBE,如何通过 $gtype 获得 TUBE 这个常量的值?

我这里不写:$gtype = "TUBE",免得你又叫我拿掉引号

论坛徽章:
0
13 [报告]
发表于 2010-04-19 14:49 |只看该作者
那就用Readonly模块吧, 不过这个模块速度要慢一些, Readonly::XS 可以加快点速度
这样可以用符号表来访 ...
hp_truth 发表于 2010-04-19 14:12



   
恩,看来还是第一个方法好些!

这样看来跟调用子方法是一样的

论坛徽章:
0
14 [报告]
发表于 2010-04-19 15:08 |只看该作者
回复 1# sotol


    {:3_204:}
  1. print eval $com{gtype}."\n" if $com{gtype};
复制代码

论坛徽章:
0
15 [报告]
发表于 2010-05-02 22:39 |只看该作者
Perl的确很强大,真实粉丝也不减
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP