Chinaunix

标题: perl版本的第一贴,有谁能帮我看一下下面的代码 [打印本页]

作者: bjbs_270    时间: 2007-09-21 17:41
标题: perl版本的第一贴,有谁能帮我看一下下面的代码
#!/usr/bin/perl -w
use strict;
my ($var,$userid);
$userid='simple';
print "Please input the var:";#input userid
$var = <STDIN>;
chomp $var;
print $$var; #want print 'simple';

在PHP中可以直接用$$var;在PERL下是用哪一个来代替呢。本人刚开始看PERL,多谢了
作者: cobrawgl    时间: 2007-09-21 19:32
Hash 倒是可以用,除了hash还没找到别的方法

等高人出来点拨一下,有没有别的办法了
作者: DennisRitchie    时间: 2007-09-21 19:47

  1. #!/usr/bin/perl
  2. use strict;

  3. my $var = <STDIN>;
  4. my $ref = \$var;
  5. print $$ref;

  6. 输入:hello
  7. 输出:hello
复制代码

[ 本帖最后由 DennisRitchie 于 2007-9-21 19:50 编辑 ]
作者: cobrawgl    时间: 2007-09-21 19:52
原帖由 DennisRitchie 于 2007-9-21 19:47 发表

#!/usr/bin/perl
use strict;

my $var = ;
my $ref = \$var;
print $$ref;

输入:hello
输出:hello



变得还挺快。不过不符合lz的要求啊

干脆用python给大家演示一下吧

[ 本帖最后由 cobrawgl 于 2007-9-21 19:56 编辑 ]
作者: DennisRitchie    时间: 2007-09-21 20:07
原帖由 cobrawgl 于 2007-9-21 19:52 发表



变得还挺快。不过不符合lz的要求啊

干脆用python给大家演示一下吧

1、LZ的要求是输入simple,打印出simple,我的程序能够达到他的要求。
2、在PHP中可以使用$$ref访问一个引用变量,楼主的意思是想问在PERL如何通过引用来访问变量,在顶楼的例子中有很多冗余的变量和代码,我删除多余代码的目的是为了更容易演示在perl中如何使用引用。
3、是你自己要求“谁能帮忙用 ruby、python 实现一下”,所以我给了个python的例子,你何必这样了。

[ 本帖最后由 DennisRitchie 于 2007-9-21 20:09 编辑 ]
作者: DennisRitchie    时间: 2007-09-21 20:11
原帖由 cobrawgl 于 2007-9-21 19:52 发表



变得还挺快。不过不符合lz的要求啊

干脆用python给大家演示一下吧

警告你一下,尔要是再无理取闹的话,当心我禀明flw版主让他按律办事。
作者: cobrawgl    时间: 2007-09-21 20:12
原帖由 DennisRitchie 于 2007-9-21 20:07 发表

1、LZ的要求是输入simple,打印出simple,我的程序能够达到他的要求。


1。拜托看清楼主的要求。

2。和你开玩笑嘛,别在意
作者: DennisRitchie    时间: 2007-09-21 20:13
原帖由 cobrawgl 于 2007-9-21 20:12 发表


1。拜托看清楼主的要求。

2。和你开玩笑嘛,别在意

俺也和你开玩笑的,大家共建和谐的PERL版块,呵呵。
作者: uppet    时间: 2007-09-21 22:21
不要使用use strict;
不要使用my变量。

程序就会符合阁下的要求。。。

参见perldoc perlref中`Symbolic references‘一段
作者: DennisRitchie    时间: 2007-09-21 22:46
原帖由 uppet 于 2007-9-21 22:21 发表
不要使用use strict;
不要使用my变量。

程序就会符合阁下的要求。。。

参见perldoc perlref中`Symbolic references‘一段

原文是“高手跳出来了,学习了!”对你不恭,现改为:uppet你高手,向你学习了!

[ 本帖最后由 DennisRitchie 于 2007-9-22 14:47 编辑 ]
作者: bjbs_270    时间: 2007-09-22 12:36
昨天下班走的早没有及时看大家的回贴,多谢各位的帮忙。
作者: bjbs_270    时间: 2007-09-22 12:44
原帖由 uppet 于 2007-9-21 22:21 发表
不要使用use strict;
不要使用my变量。

程序就会符合阁下的要求。。。

参见perldoc perlref中`Symbolic references‘一段


能不能详加解释一下呢,多谢!一般写程序的时候用use strict 及 my 变量不是会使程序更加严谨一点的吗,这样做是不是有背perl的精神,我刚接解PERL,可能说的比较行外话,请不要见笑,不过小弟是真的想搞明白这些问题,多谢了!
作者: flw    时间: 2007-09-22 12:53
原帖由 DennisRitchie 于 2007-9-21 22:46 发表

高手跳出来了,学习了!

再警告你一次!
别讨人不喜欢!
作者: bjbs_270    时间: 2007-09-22 13:12
to:uppet
你说的解决方案我测试了,是OK的,不过我还是有些不明白,如果哪天你来看贴的时候麻烦你回复一下我,或有路过的朋友知道的也告诉我一声,多谢了。

我的问题是:

在perl书写中用use strict是为了使程序更加严谨
  1. strict 模块干的事是更加严格地约束 Perl 中的一些规则,
  2. 这样你在很多方面必须更明确,而不是让 Perl 去猜,例
  3. 如如何确定变量的作用范围。
  4. use strict; 就是声明你需要控制自己程序符合规则,比
  5. 如:声明变量等。
复制代码


所以从上面的理解上来看对于uppet老兄的说法去做的话有点“杀敌一千,自损八百”。我想知道是不是有其实的可行的规范的方法呢。


多谢了!
作者: flw    时间: 2007-09-22 13:23
你说的不错。
正因如此,符号引用是不推荐使用的——正如前面那位朋友所说,类似的需求通常可通过 hash 来解决。
如果你一定要用符号引用,
那么你可以在局部作用域 no strict 'refs' 。

本版过去讨论过这个问题很多次,
实在没兴趣再做长篇大论了。
千言万语化成一句话:
好好看书,别轻易问人。
作者: bjbs_270    时间: 2007-09-22 13:45
版主的话是良言,我相信我所问的东东也不是没有经过脑子思考就问的,可以看我是在PERL版的第一贴,
我会认真看书的,可能是我不知道怎么样搜索这样的问题,你可以搜索我在CU发的贴子,我在问问之前是会经过自己思考的,不会张口即来,我相信有大家的交流学习会更快一点,只停留在书本上的学习方法我不太喜欢,我也相信大家来这里就是为了在交流中进步,我相信版主你不会反对我的话。
作者: DennisRitchie    时间: 2007-09-22 14:39
原帖由 flw 于 2007-9-22 12:53 发表

再警告你一次!
别讨人不喜欢!


你发什么火?
1、2楼的cobrawgl不是说“等高人出来点拨一下,有没有别的办法了”
2、我给出自己的方法,难道不是在帮助楼主吗?有挑衅的意思吗?
3、uppet的解决方法确实比我的好, 我说“高手跳出来了,学习了”并无讽刺他的意思,况且我从未和他冲突过!有什么不行啊?
作者: flw    时间: 2007-09-22 14:40
原帖由 DennisRitchie 于 2007-9-22 14:39 发表

你发什么火?
1、2楼的cobrawgl不是说“等高人出来点拨一下,有没有别的办法了”
2、我给出自己的方法,难道不是在帮助楼主吗?有挑衅的意思吗?
3、uppet的解决方法确实比我的好, 我说“高手跳出来了, ...

你不觉得“跳”字用得很不礼貌吗?
作者: DennisRitchie    时间: 2007-09-22 14:46
标题: 我也警告你一下,请文明用语!
原帖由 flw 于 2007-9-22 14:40 发表

你不觉得“跳”字用得很不礼貌吗?

1、以当时的情况来看,这只是一个玩笑而已。
2、这个词我用的不礼貌,我向uppet道歉:对不起
3、我现在就删除这个用词

那么请问你自己了,你改不改?我也警告你一下,请文明用语!
原帖由 flw 于 2007-9-19 13:44 发表
因为有个傻逼注册了一个和我的 ID 看上去差不多的 ID,
并且用我的头像做头像。

傻逼太多,我只好绕道走。

作者: DennisRitchie    时间: 2007-09-22 14:49
我都和waker停止争论了,他叫我不要JJYY,你自己凭良心说,这一贴是不是你在惹事生非?!?
作者: flw    时间: 2007-09-22 15:01
原帖由 DennisRitchie 于 2007-9-22 14:49 发表
我都和waker停止争论了,他叫我不要JJYY,你自己凭良心说,这一贴是不是你在惹事生非?!?

你给我滚远点儿。
什么脑子嘛。
作者: bjbs_270    时间: 2007-09-22 17:28
天气热,大家不要上火,来瓶王老吉吧!
不是说冲动是魔鬼吗?非常感觉所有在该贴中留下足迹的朋友,我感受到你们的热情了
to DennisRitchie :
我相信你不是在闹事,只是每个人的语言表达方式不同而已,在现实生活中我们都会有说者无心的时候。
to flw :
对版主这个称呼我是非常之崇拜的,因为站在这个位子上我认为不是荣誉,而是一种责任,所以他对大家回贴的言词要求比较高,所以大家也可以理解一下吗,因为难免有些人会计较语言上的东东。从flw对如我这一类问题的回复上我可以看出他的良苦用心,因为我是初学,基础不好,所以他的建议是对的,从他的回贴中我看到很多他说让问者多看书的建议,这说明他对我们这些菜鸟还是很负责任的。

所以为了PERL版的大好学习环境,大家好好相处了!

这可是我在PERL版的处女贴呀!
作者: evil_knight    时间: 2007-09-22 20:04
原帖由 bjbs_270 于 2007-9-22 17:28 发表
天气热,大家不要上火,来瓶王老吉吧!
不是说冲动是魔鬼吗?非常感觉所有在该贴中留下足迹的朋友,我感受到你们的热情了
to DennisRitchie :
我相信你不是在闹事,只是每个人的语言表达方式不同而已,在现实 ...


兄弟,flw就这样,你的第一次被强暴了
作者: perljoker    时间: 2007-09-22 20:34
原帖由 flw 于 2007-9-22 15:01 发表

你给我滚远点儿。
什么脑子嘛。

版主先生,我知道你已经很忍了,我完全能理解,但是你怎么说也是版主
还忘自重啊,做事说话前,还是多考虑责任
你对perl版相当有责任,但是对于cuer,还欠点
希望采纳
作者: uppet    时间: 2007-09-22 23:22
对于前的争吵,区区只想说,多一点宽容,多一点幽默的态度就好啦。
再说来,偶而吵吵也好,有益内循环和增加CU的流量。:wink:

听说CSDN前些日子还跟着linus大叔玩口水流~

想对bjbs_270说:任何书面协议都是死的,是人结合自己的实践才做出活的解释来。
说use strict是好的实践,并不是强行让人们在所有的perl程序中都加入use strict,
那么one liner和小的pipe程序写起来就过于罗嗦了。短程序就该是短的,不要让维
护者或用户(可能是自己啊)有包袱。

允许符号引用就像是开启了C语言中的野指针,是要为安全付出代价的。但如果非要如
此,perl提供方法给你,no strict 'ref'。。。

其实很多语言功能是为库开发者准备的,在平时开发时应该少用(减少包袱嘛)。

当你发现要实现一个功能非要使用一些很偏门的技术或者要处理语言缺陷时,你应当
停下来想想是不是自己的设计有何不良之处,是否存在更加自然的设计或者表达方式呢?

楼上所说的引用及使用%(hash结构)是更好的办法。(简单,安全,易懂,这不就是咱们
弃汇编而使用perl来做快速开发的原因么)

本着深入学习的态度,你可以任意研究任一细节。看perldoc,看书,或者像flw大侠一样,看perl的解析器源代码。

但在实际编码时,要做的事情是:
Keep It Simple & Stupid。。
作者: bjbs_270    时间: 2007-09-23 00:05
TO uppet :
非常感谢你的回复,我同意你的某些说法,当要实现某些特定功能的时候是可以考虑放弃某些道道。

我现在还只能算是站在PERL大门外面,所以学习才是硬道理,各位都是我在PERL方面的老师,哈,,多谢!
作者: perljoker    时间: 2007-09-23 00:47
原帖由 bjbs_270 于 2007-9-23 00:05 发表
TO uppet :
非常感谢你的回复,我同意你的某些说法,当要实现某些特定功能的时候是可以考虑放弃某些道道。

我现在还只能算是站在PERL大门外面,所以学习才是硬道理,各位都是我在PERL方面的老师,哈,,多谢!

哇,你的学习态度太好了,偶要大力像你学习,所有人都像你这样的态度,不知道flw会不会高兴死
其实说来,偶一直没看懂你主题的意思,貌似其他人都懂,唉,估计是偶也是初学者的原因
需要看更多的书啊
作者: bjbs_270    时间: 2007-09-23 01:38
其实说来,偶一直没看懂你主题的意思,貌似其他人都懂,唉,估计是偶也是初学者的原因
需要看更多的书啊


用下面的表达你可能更容易理解
[code]
#!/usr/bin/perl -w
use strict;
my ($userid,$passwd,$email,$input) = qw(simple 123456 username@gmail.com);
print "Please input var:";
chomp( my $input=<STDIN>);
print "the ${input}'s value is ${$input}\n"# 输入的为userid时取得的值为simple,输入的值为passwd时取得的值为123456,如此而已。
[code]

经过上面各位朋友的解答这个问题最好的最安全的办法是通过哈希来解决了。即把输入的值当成是哈希中的键值,根据键值输出对应哈希中的值了。
作者: perljoker    时间: 2007-09-23 10:42
标题: 回复 #28 bjbs_270 的帖子
我说的,你文章写了 $userid='simple';
然后又说input userid,我的第一反应是你输入了simple
然后又打印simple,汗死,原来理解错误

对的,对于唯一性标识的东西,用hash是很合适的
而且hash里面包含其他数据结构能有很大的扩展性
比如userid(本身是个数字),下面结构可以有{password=>'',name=>'',sex=>''}
作者: tom_xx_hu@yahoo    时间: 2007-09-24 04:26
标题: 版主真的开了DR?
版主flw真的从此帖中封了DR?
版主太意气用事了吧?你这样下去我觉得迟早会落下风。
作者: HAkiller    时间: 2007-09-24 10:55
what is flw ??
水平高低不敢妄言,不过脾气倒大的吓人,你以为这的都是你下属啊?哦对了,客观的说,我估计你这样的脾气也当不了什么领导,把自己摆正点。




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