blue1025的个人空间 https://blog.eetop.cn/mj8051 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

PERL 第5章 Input & Output

已有 1044 次阅读| 2008-9-27 13:58 |个人分类:PERL

SOURCE HTML: http://socvista.com/bbs/redirect.php?fid=71&tid=909&goto=nextnewset

14:24
-- 从标准输入<STDIN>获得input
<STDIN>是连接一个标准输入块的行输入符,有两种使用方法:
1. while (<STDIN>) {}
2. foreach (<STDIN>) {}
区别是,while是实时执行,而foreach要等到所有输入都被读取后才开始执行。每次循环都对输入块中的一个行进行处理。

-- 从diamond符号中获取文件输入
使用方法:
while (<>) {chomp; print "It was $_ that I saw!\n";}
这里的<>是连接一个文件输入块的行输入符,所谓的文件块可以是若干个文件的联合输入,这些文件通过perl脚本的参数来指定。比如:
./my_program fred barney betty
这个脚本在执行时有三个文件参数,因此这三个相关文件将被读取并连接在一起,然后通过<>符合一行一行读入。直到最后一个文件的EOF处,才会返回一个undef值,表示文件结束。

-- <>符合和调用参数@ARGV的关系
<>符号操作其实参考了@ARGV变量,如果执行脚本时输入了参数,则这些参数会进入这个系统变量,我们也可以人为修改这个变量,如果该变量为空,则等效于<STDIN>。看一个实例:
@ARGV = qw/ fred barney/;
while (<>) {chomp; print "It was $_ that I saw!\n";}

-- 打印文件块
print <>; # source code for 'cat'
print sort <>; # source code for 'sort'

21:02  (File handles)
-- 如何在命令行中指定文件
$ ./you_program <input_filename  >output_filename
$ cat fred barney | sort | ./your_program | grep something | lpr   # 支持pipeline
$ netstat | ./you_program 2>/tmp/my_errors  # 报错

-- 打开file handle
open CONFIG, "dino";     # 打开dino用于输入
open CONFIG, "<dino";   # 打开dino用于输入
open CONFIG, ">dino";   # 打开dino用于输出,new 模式
open CONFIG, ">>dino"  # 打开dino用于输出,append模式
文件名可以是变量形式,如
open CONFIG, "> $file_name";

-- 确认打开文件是否失败
my $success = open LOG, ">>logfile";
if (! $success) {}

-- 关闭file handle
close LOG;

-- 定制我们自己的fatal error
通过die来完成。两个功能:使程序退出和输出错误信息。
if (! open LOG, ">>logfile") {
  die "Cannot create logfile: $!";  # 此处的$!是open文件失败时系统返回给perl的出错原因。
}
另一个例子。
if (@ARGV <2) {
  die "Not enough arguments\n";
}

-- 定制warning
通过warn函数实现。使用方法同die。不同之处是warn不会令程序退出。

-- 使用file handle
一旦file handle成功建立,则使用file handle和使用标准的输入<STDIN>就完全一样了。
if ( ! open PASSWD, "/etc/passwd") {
  die "how did you get logged in? ($!)";
}
while (<PASSWD>) {
  chomp;
  ......
}
如果file handle是用于写入或者append的,则可以通过print和printf向文件写内容。
print LOG "captain's log, stardate 3.14\n";
printf LOG ("%d percent complete.\n", $done/$total*100);
注意,print和printf的参数之间没有逗号隔开。

-- 修改输出的file handle
默认的是 STDOUT,但是我们可以修改。
select FH_OUT;
print "welcome!\n";
通过select我们可以选择print的默认输出fiel handle。

点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 13

    粉丝
  • 14

    好友
  • 15

    获赞
  • 23

    评论
  • 2819

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-29 21:19 , Processed in 0.016210 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部