钻石操作符的输入
钻石操作符提供类似 标准Unix工具程序的参数输入方式,例如对于如下Perl程序“my_program”:
while {
chomp;
print;
}
如果执行命令“./my_program fred barney betty”,它应该会处理文件fred,接着是barney,最后是betty。(钻石操作符怎么会知道检查命令行参数呢?其实它的参数是来自@ARGV数组)
如果执行命令是没有指定调用参数,程序会从标准输入流采集数据。
当然还有个例外,如果参数中包含连字符“-”,则Perl代码处理到连字符时,会临时改从标准输入读取数据。 使用print/printf/say输出到标准输出
Print操作符会读取后续列表中的所有元素,并把每一项一次送到标准输出。
print ; #相当于Unix下的cat命令
print sort ; #相当于Unix下的sort命令
如果对print的输出格式不够满意,还可以使用printf来产生格式化过的输出结果。
printf "Hello, %s; your password expires in %d days!\n", $user, $days_to_die; 当然Perl一如既往地提供了更方便的格式"%g" (你可以把"g"当成"General"数字转换)。
一般来说,我们编写printf的格式化字符串时已经确定了替换参数的个数和类型,不过万事没有绝对,下面的例子就是用程序在运行时动态产生格式字符串。
my @items = qw( wilma dino pebbles );
my $format = "The items are: \n" . ("%10s\n" x @items);
printf $format, @items;
另外,有个叫Perl Power Tools (PPT)的项目目标就是用perl重写所有经典Unix工具程序,但是在重写shell的时候陷入了难题。PPT项目一度非常有用,因为它使所有便准的工具程序可以运行在非Unix机器上。
Say函数的功能和print的差不多,但在打印每行内容时都会自动加上换行符。所以下面几种写法的输出结果都一样:
use 5.010
print "Hello!\n";
print "Hello!" . "\n";
say "Hello!"; 文件句柄
一般使用全大写字母来命名文件句柄,但是有6个个数文件句柄是Perl保留的——STDIN、STDOUT、STDERR、DATA、ARGV以及ARGVOUT。
open CONFIG, 'dino'; #打开一个文件
open CONFIG, 'fred' #创建一个新的文件,如果已经存在,则清除原有内容并以新内容代替
open LOG, '>>logfile' #追加方式打开一个文件,如果文件不存在,则创建一个新文件
5.6版的Perl里,加入了open的三个参数的写法:
open CONFIG, '', $file_name;
open CONFG, ':utf8', &logfile_name(); #这种简写的方式不会考虑输入输出的数据是否真的是合法的UTF-8字符串
我们可以通过下面的这条命令打印出说有perl能理解的字符编码清单:
% perl -MEncode -le "print for Encode->encodings(':all')" 除了字符编码之外,数据输入或输出过程中还可以做其他转换操作。比如DOS风格和Unix风格的换行符:
open BEDROCK, '>:crlf', $file_name; #按照DOS换行符风格写入文件
open BEDROCK, '>', 'logfile' ) {
die "Cannot create logfile: $!"; #die函数会终止程序的运行并打印出错信息