免费注册 查看新帖 |

Chinaunix

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

已经解决.结贴 脚本 Perl - print函数不能打印变量的值 (输出缓冲) [复制链接]

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
21 [报告]
发表于 2015-09-02 13:59 |只看该作者
回复 20# pyartist
大神,我使用:
perl  -v  #得到如下提示:
This is perl, v5.10.1 (*) built for i386-linux-thread-multi


使用:
which perl #得到如下提示:
/usr/bin/perl



   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
22 [报告]
发表于 2015-09-02 14:19 |只看该作者
回复 13# zhlong8
大神,小弟会紧记您的教导! 但是还是有一概念不是很明白,还请大神指点迷津.

在网络上的一些资料中都提到与诸位大神像 "zhlong8","perl6 爱好者","pyartist"以及本人所说的那样,
perl的输出缓冲的问题,且必须跟以类似 "\t" 或是 "\n" 之类的空白字符才能正确显示. 以下是摘录原文中的部分文字:
perl默认是有输出缓冲的,显示到命令行上必须以\n结尾才行,非得要等缓冲区满了


像 "\n" 这样的换行符对于输出缓冲起到一个什么样的作用,请大神指点迷津...

   

论坛徽章:
18
2015年迎新春徽章
日期:2015-03-04 10:16:53操作系统版块每日发帖之星
日期:2016-05-11 06:20:0015-16赛季CBA联赛之佛山
日期:2016-05-06 22:28:4415-16赛季CBA联赛之广夏
日期:2016-04-22 23:24:00操作系统版块每日发帖之星
日期:2016-04-21 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44操作系统版块每日发帖之星
日期:2016-02-03 06:20:00IT运维版块每日发帖之星
日期:2016-01-31 06:20:00IT运维版块每日发帖之星
日期:2016-01-30 06:20:00IT运维版块每日发帖之星
日期:2016-01-24 06:20:00IT运维版块每日发帖之星
日期:2016-01-23 06:20:00操作系统版块每日发帖之星
日期:2015-11-26 06:20:00
23 [报告]
发表于 2015-09-02 20:04 |只看该作者
本帖最后由 SeAL80s 于 2015-09-02 20:17 编辑

回复 1# sunzhiguolu


    我虽然不懂perl,但是把你的代码打进vim,是可以在终端打出onetwothree的。

   1.确定你系统的perl

    $whereis perl

    $perl -v

   2.确定你的mx_perl_operate_array有执行权限

      ls -l mx_perl_operate_array

   3.$pwd

      确定当前工作目录,确定你在本目录下有mx_perl_operate_array

      另外,你用的自己的机器还是学校公用机房,确定你有权chmod +x mx_perl_operate_array

我的系统Fedora 22 x86_64
perl -v This is perl 5, version 20, subversion 2 (v5.20.2)
可以把你的终端截屏贴出来,当前判断,不是你的perl程序问题,可能是你系统环境问题

另外再提醒你一句:论坛里是有神,但是不要见人就叫神,虽然听着会自我膨胀,多看一会你问题,不过一句一个神,时间长了就像跳大神了
再一个,抓重点,你现在的问题是打印不出onetwothree。"终端是行缓冲的",已经脱离问题了,那不再是perl的范围,是Linux底层机制、shell、甚至终端设置问题了。你也发现了,没人给你解释什么是"终端是行缓冲的",这个时候你可以去Bing(我这里不能Google),"linux 终端 行缓冲"类似的...
你是把代码贴出来了,当有人回复代码没问题的时候,你要自己联想一下,把终端执行结果截图出来看看,有时候你看没问题,不代表真的没问题。
在我的机器上,执行你的代码是没问题的。RHEL 6.5虽然也叫Linux,但是RHEL是服务器级别的操作系统,一般没点功利是玩不转的,需要的基础更扎实,所以我现在只能用Fedora .

论坛徽章:
18
2015年迎新春徽章
日期:2015-03-04 10:16:53操作系统版块每日发帖之星
日期:2016-05-11 06:20:0015-16赛季CBA联赛之佛山
日期:2016-05-06 22:28:4415-16赛季CBA联赛之广夏
日期:2016-04-22 23:24:00操作系统版块每日发帖之星
日期:2016-04-21 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44操作系统版块每日发帖之星
日期:2016-02-03 06:20:00IT运维版块每日发帖之星
日期:2016-01-31 06:20:00IT运维版块每日发帖之星
日期:2016-01-30 06:20:00IT运维版块每日发帖之星
日期:2016-01-24 06:20:00IT运维版块每日发帖之星
日期:2016-01-23 06:20:00操作系统版块每日发帖之星
日期:2015-11-26 06:20:00
24 [报告]
发表于 2015-09-02 20:20 |只看该作者
回复 22# sunzhiguolu


    你的源代码是one two three,看得见中间是有空格的,但是我输出的是onetwothree ,这个可能就是所说的行缓冲,不加\t \n就没效果。

    我的输出是这样的onetwothree[xiaoyu@VIVIAN-YU ~]$

    你确定你是没输出,还是输出在行首,没换行所以你没看到???

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
25 [报告]
发表于 2015-09-02 22:56 |只看该作者
我对你的了解几乎为零,不知道你有什么知识储备,只能猜测是非常新的新手。对于有点C经验的程序员,只需要提醒下IO操作很昂贵,自己都能“发明”出行缓冲块缓冲的概念。但是对于新手实在没能力几句话说清楚

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
26 [报告]
发表于 2015-09-03 12:26 |只看该作者
本帖最后由 sunzhiguolu 于 2015-09-03 12:34 编辑

回复 23# SeAL80s
感谢您的指点,以下是我的命令输出:
which perl
/usr/bin/perl
perl -v

This is perl, v5.10.1 (*) built for i386-linux-thread-multi

Copyright 1987-2009, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

ls -l m_op_ary
-rwxr-xr-x. 1 kylin kylin 93 9月   3 12:29 m_op_ary


下面是我进入工作目录后执行的m_op_ary的情况
perl m_op_ary


还请前辈指点,执行后什么都没有出现,所以我没有贴出结果. 多谢多谢...

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
27 [报告]
发表于 2015-09-03 12:42 |只看该作者
回复 25# zhlong8
您方才讲的 I/O 操作比较昂所以才有了输出缓冲的这个机制,那么这个机制就是为了避免存储设备的频繁读写操作.

以前学习C#,但是基础不够扎实. 如果大神能够简单讲一下"换行符对于输出缓冲的影响",换行符在输出缓存中起到一个什么样的作用?
还请您多多指点迷津...

   

论坛徽章:
18
2015年迎新春徽章
日期:2015-03-04 10:16:53操作系统版块每日发帖之星
日期:2016-05-11 06:20:0015-16赛季CBA联赛之佛山
日期:2016-05-06 22:28:4415-16赛季CBA联赛之广夏
日期:2016-04-22 23:24:00操作系统版块每日发帖之星
日期:2016-04-21 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44操作系统版块每日发帖之星
日期:2016-02-03 06:20:00IT运维版块每日发帖之星
日期:2016-01-31 06:20:00IT运维版块每日发帖之星
日期:2016-01-30 06:20:00IT运维版块每日发帖之星
日期:2016-01-24 06:20:00IT运维版块每日发帖之星
日期:2016-01-23 06:20:00操作系统版块每日发帖之星
日期:2015-11-26 06:20:00
28 [报告]
发表于 2015-09-03 12:56 |只看该作者
回复 26# sunzhiguolu


    1.看卡你系统几个perl

      whereis perl

    2.用perl的全路径执行程序,比如/usr/bin/perl myperl


    3.下个ActivePerl,执行你的程序,怀疑系统perl版本过老,或者有bug,或者有多个版本。一般都不推荐用系统自带perl做开发,传说系统自带perl不完整。我都是自己装ActivePerl


       我不做perl开发,不过现在比较常用的版本好像是5.16 ,5.10好像太老吧

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
29 [报告]
发表于 2015-09-03 13:51 |只看该作者
回复 27# sunzhiguolu


    对于不同的硬件最合适的缓存策略是不同的,比如硬盘自然块越大性能越好,只要保证内容正确都写入就行了。打印机最好是一页一页的性能最好,而终端显示器要考虑到交互的实时性,又要兼顾性能(不能有过多的系统调用缓冲区又不能太大),缓存策略一般是满一行输出一次让用户不会认为程序卡死了,而一行的标准就是 \n 这个字符。但是这个策略不是完美的,有时我们需要及时刷新终端又不需要换行,就有了 $| 这个特殊变量来控制每次输出都自动刷新缓冲区,如果完全不想用缓存机制还有 syswrite 这个内置函数。

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
30 [报告]
发表于 2015-09-03 19:14 |只看该作者
回复 28# SeAL80s
前辈我是最近才安装的red hat 6.5 这个系统到我的主机上的,您说的没错我这个系统的确是系统自带的. 所以版本比较老.
多谢您给予的宝贵意见,多谢多谢!

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP