免费注册 查看新帖 |

Chinaunix

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

新加入perl,问个小骆驼的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-20 15:58 |只看该作者 |倒序浏览
小骆驼上说这个是追加:
open LOG,"> $logfile";

注意 "> " 前的空格 , 这个到底是什么意思啊, 书上是这么解释的 perl 会忽略它,但可以防止意外发生

初学者请教各位了

论坛徽章:
0
2 [报告]
发表于 2011-02-20 16:21 |只看该作者
$logfile的值如果是">file",那">$logfile"就变成">>file",由改写变成添加内容了

论坛徽章:
0
3 [报告]
发表于 2011-02-20 16:21 |只看该作者
这个是追加吗?

正确的推荐写法:

open my $fd, ">>", $file or die $!;

几个重点:

(1)使用三参数的open;
(2)使用my声明的局部变量代替裸文件句柄;
(3)追加是">>"而不是">";
(4)每个open都要判断执行结果(or die)。

论坛徽章:
0
4 [报告]
发表于 2011-02-20 16:44 |只看该作者
回复 3# 兰花仙子
谢谢指教
1. 追加 ">>"
2. 清空后再添加内容 或 生成文件 ">"
3. 只读  "<"

以上三种我明白

###################

是我看书不仔细  ,   小骆驼原话是这样: 如果 $logfile 的值是 ">passwd" 而之前又没有空格的话 , 就会变成以替换方式写入,而非以追加方式写入文件

open LOG ,"> $filelog"

原来是这个意思, 如果 open LOG ,"> $filelog" 中的 "> "前没有空格则成这样了 ">>paaswd" ($logfile 文件名是 >passwd) ,就变成追加的意思了

                          而有空格,则还是 替换  , 如 open LOG ,">   >passwd"

论坛徽章:
0
5 [报告]
发表于 2011-02-20 16:48 |只看该作者
的确还是这种好             open my $fd, ">>", $file or die $!;

也避免上贴的说情况了

论坛徽章:
0
6 [报告]
发表于 2011-02-20 18:04 |只看该作者
回复 3# 兰花仙子


    仙子,再问个问题 , 如下

  1.     my $LOG_FILE = "/var/log/proxy.log";
  2.     open LOG,"<","$LOG_FILE" or die "Not open $LOG_FILE, $i";

  3.     while (<LOG>) {
  4.           ... ...;
  5.     }

  6.     close LOG;
复制代码
在 还未执行 while 语块时 , $LOG_FILE 是否已经全部读到内存中 ???  还是,open 只是打开了个文件句柄,但还并未将数据读到内存中

如果是,这么个用法很费内存啊

论坛徽章:
0
7 [报告]
发表于 2011-02-20 18:51 |只看该作者
在 还未执行 while 语块时 , $LOG_FILE 是否已经全部读到内存中 ???  还是,open 只是打开了个文件句柄,但还并未将数据读到内存中


显然是后者。

论坛徽章:
0
8 [报告]
发表于 2011-02-20 19:28 |只看该作者
Perl,不要用其它语言的经验来揣摩。

论坛徽章:
0
9 [报告]
发表于 2011-02-20 21:10 |只看该作者
  懂了,谢几位
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP