Perl中的骆驼精神(三)

Perl中读取标准输入:<STDIN>

foreach (<STDIN>)  { print "I saw $_";}

钻石操作符<>:它的参数来源于@ARGV数组。

先检查@ARGV数组,如果为空,则从标准输入流输入。@ARGV的值可以来自命令行,也可以自己赋值。

./program  fred  barney betty     #@ARGV的值便是命令行后的三个文件。

while (<>)   {  chomp;   print "It‘s was $_ that I saw";}

Perl中的标准输出:print。输出多项时,可以通过加","来隔开,各自用双引号括起。

用print输出数组时。print @array;  #会输出@array中所有元素,以空格分隔。相当于数组内插。

用printf格式化输出。%g/%d/%s/     printf  “The items are:\n”.("%10s\n"[email protected]), @items;  #定义多个%s

注意print加括号时是显式的函数调用,是列表上下文,返回列表。不加括号时,返回标量0/1。

print <>;     将输入直接输出。

文件句柄:代表Perl进程与I/O之间联系的名称,而不是说一个文件的名称,

Shell中的文件I/O流:      ./program  <dino  >wilma          #表示从文件dino输入,输出到wilma,Perl程序仍然是输入STDIN,

输出到STDOUT。剩下的部分由Shell来处理。

netstat  |  ./your_program    2>/tmp/my_errors   #对STDERR重定向。

裸字(bareward)文件句柄:  open  CONFIG,  ‘< dino‘;     #打开dino文件作为输入,文件句柄的操作符叫CONFIG。

Perl中默认打开的文件句柄是输入。‘>‘输出,‘>>‘追加在某个已经存在的文件后。注意将文件用单引号括起来。

close CONFIG;                    #关闭文件句柄

使用标量变量的文件句柄:一般先用词法变量my来定义。

my  $rocks_fh;

open $rocks_fh,  ‘>‘, ‘file.txt‘;               #一般用后缀_fh来表示文件句柄。

在Perl中可以使用die和warning来,分别结束当前Perl进程,和输出warning到STDERR。

die "Cannot create LOG flie:$!"      #$!表示进行系统调用时的返回值。Perl默认会将Perl文件名和行号加在log中。

die "Cannot create LOG flie:$! \n"     #加了换行符后,Perl不会再加入文件名和行号。

使用文件句柄来输入时:直接在<>括号中加入句柄名。

while (<PASSWD>)   {......}

使用文件句柄来输出时:在print/printf 后加入文件句柄名。但是不要加逗号,否则会当做需要输出字符串的字数的一部分。或者直接用

花括号{}将文件句柄的名字括起来。

print  {LOG}  "HAHA";

改变默认的文件句柄,使用select关键字。 select LOG;   select STDERR;

从Perl5.10开始,可以使用say来代替print。say会自动在输出的字符结束添加换行符。

时间: 2024-11-07 14:12:39

Perl中的骆驼精神(三)的相关文章

Perl中的骆驼精神

Perl中的哈希数据结构. 哈希是一种数据结构,由一对对的键(keys)--值(values)对来组成. 这些键和值都是任意的标量,但键总会被转换成字符串而且必须是唯一的字符串. 访问哈希元素,    $hash{$some_key}    ##和访问数组的做法类似,只是使用了花括号{}而非方括号[]. 访问哈希表中不存在的值得到undef. $family_name{'barney'} = 'rubble'        ##完成对某一哈希元素的单一赋值 访问整个哈希,    %family_

Perl的骆驼精神(一)

Perl语言中的大部分语句表达式后都紧接一个分号,分隔不同的Perl语句. perl解释器能一次完成编译和运行这两个动作. perl通过一对反引号"``"来表示运行外部命令. 标量(scalar)包括数字和字符串两部分. 在perl内部按“双精度浮点数”的格式来存储数字,整型常量也会被转换成等效的浮点数. perl允许在数字直接量间插入“_”分隔符.而且对于十进制(decimal)之外的数.八进制(octal)以“O”开头. 十六进制(hexadecimal)以“0x”开头.二进制(b

Perl的骆驼精神(二)

在Perl中可以自己创建子程序(Subroutine): 关键字sub,子程序名以及用花括号封闭起来的代码块. sub  marine { ... } 子程序名与标量的命名空间是不同的两个部分. 子程序的返回值:最后一次运算的表达式即是默认的返回值.也可以用return来显式的返回,这样之后的语句不会执行. 在标量上下文返回的会是标量,在列表上下文返回的也是列表. 子程序中的参数:子程序内部可以使用@_,$_[1],$_[2],,,这样的变量来表示.@_变量是子程序私有变量,递归调用时,不会出错

Perl中Schwartzian转换问题

Perl中著名的Schwartzian转换,其产生背景主要涉及到排序问题: 比如说,根据文件名以字母顺序排序,代码如下: use strict; use warnings; my @files = glob "*.xml"; #perl中文件操作符glob提供相当于shell中的通配符的功能 my @sorted_files = sort @files; #sort(),排序,默认是字母顺序排序 比如说,根据文件名长度排序,其代码如下: use strict; use warnings

Perl中的正则表达

前几天用到了Perl语言,主要看了一下Perl中的正则表达式,在各种网页语言中,正则表达式在处理字符串的时候十分有用,所以这里就简单说一下在Perl中正则表达式的应用. 先上代码 1 #!/usr/bin/perl -w 2 #use utf8; 3 #use encoding "gb2312"; 4 5 open(DATA,"<test2.txt") or die "read error"; 6 7 open(OUT,">

perl C/C++ 扩展(三)

第三讲扩展库使用c++实现,在调用函数后,返回对象变量,perl 能正确使用所有对象成员 使用h2xs 命令生成初始文件 h2xs -A -n three_test 登录目录 cd three_test c++ 头文件 #ifndef INCLUDED_DUCK_H #define INCLUDED_DUCK_H 1 #include <string> using std::string; class Duck { public: Duck(char*); char* getName(); v

关于perl中文件操作句柄使用的几种方式-基础版

在perl中存在几种句柄使用的方式,其中open为最基础的使用方法,下面把我遇到的几种句柄的使用方法做一个小小的总结: open方法的使用: open方法是教程中最基础的打开文件的句柄使用方法,较为常见 教程中给出的使用方式有三种使用方式 open FILEHANDLE,EXPR open FILEHANDLE,MODE,LIST open FILEHANDLE 我在这里只介绍简单的使用方式,其它的可自行进行扩展学习. open文件内容的读取和写入: use strict; #准备进行读取的文件

perl中foreach(一)

perl中的foreach结构 首先语法 foreach $rock(qw /bedrock slate lava/){ $rock="\t$rock"; $rock .="\n"; } Foreach 从列表(数组)的第一个元素一直循环执行到最后一个元素,一次迭代一个.控制变量(本例中为$rock)每一次迭代从列表中取出一个新值.第一次为 “ bedrock” ,第三次为 “ lava” .控制变量不是这些列表元素中的一个拷贝而是这些元素本身. 也就是说,如果在循

【转载】Perl中字符串编码的处理

在 Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种utf8编码的字符串, perl管它叫string. 也就是说: Perl只熟悉两种编码: Ascii(octets)和utf8(string). utf8 flag在perl内部, 字符串结构由两部分组成: 数据和utf8 flag. 比如字符串"中国"在perl内部的存储是这样:utf8 flag 数据On 中国假如utf8 flag是On的话, perl就会把中国当成