Chinaunix

标题: 请教个变量转换的问题! [打印本页]

作者: toniz    时间: 2009-12-15 10:23
标题: 请教个变量转换的问题!
用my $rex=['a'..'z','A'..'Z']定义一个数组,
现在想把'a'..'z','A'..'Z' 这段定义放在文件里面,所以用了一个变量来保存:
my $conf = "'a'..'z','A'..'Z'";
print "$conf"; #'a'..'z','A'..'Z'
但是用到 $rex=[$conf] 的时候,[]里的变量会被自动加上转义。
my $rex=        [$conf];
print  $rex; # '\'a\'..\'z\',\'A\'..\'Z\''

请问下这个有什么办法解决!O(∩_∩)O
作者: 兰花仙子    时间: 2009-12-15 10:44
可用eval,但不建议~

# perl -le '$conf = "'a'..'z','A'..'Z'"; $x = eval "[$conf]"; print "@$x"'
a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
作者: yybmsrs    时间: 2009-12-15 10:50
my @conf = eval("'a'..'z','A'..'Z'");
my $rex = \@conf;

应该是你想要的。
作者: 兰花仙子    时间: 2009-12-15 10:57
eval "string" (注意不是eval {block},前者在运行时编译,后者在编译时编译),是server端编程的安全大忌。
有的公司在项目发布前,会请专门的安全审计公司来对代码进行审计,发现一个eval string扣100 USD。
偶就被扣过
作者: yybmsrs    时间: 2009-12-15 11:00
原帖由 兰花仙子 于 2009-12-15 10:57 发表
eval "string" (注意不是eval {block},前者在运行时编译,后者在编译时编译),是server端编程的安全大忌。
有的公司在项目发布前,会请专门的安全审计公司来对代码进行审计,发现一个eval string扣100 USD。 ...


eval()跟eval ""好像没区别吧?我习惯加(),如close(READ)等等。。。
作者: 兰花仙子    时间: 2009-12-15 11:05
标题: 回复 #5 yybmsrs 的帖子
我说过eval ()么?一点也不细心
作者: yybmsrs    时间: 2009-12-15 11:06
原帖由 兰花仙子 于 2009-12-15 11:05 发表
我说过eval ()么?一点也不细心


作者: toniz    时间: 2009-12-15 11:08
标题: 回复 #2 兰花仙子 的帖子
O(∩_∩)O~  谢谢仙子和yybmsrs
弄的是个造数程序,都自己用的,就不去考虑它安不安全了。
作者: 兰花仙子    时间: 2009-12-15 11:10
原帖由 yybmsrs 于 2009-12-15 11:06 发表


啥呀?说你还说错了啊???
明明我讲的是eval {},你非的理解成eval ()~ hmmmmmm~




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2