Perl 学习笔记-输入输出
1.读取标准输入<STDIN>(行输入操作=> 读取一行直到换行符)
chomp($line = <STDIN>); # 读取一行并去掉最后的换行符(不会自动去掉) print $line; printf("\n"); # 格式化输出换行符#在下面的循环里面会自动去掉末尾换行符,和上下文相关?不过最好还是写在循环体内的第一行,如果需要的话 while(defined($line=<STDIN>)){ # defined保证变量不为undefprint $line; } # 另一种写法,要注意的是<STDIN>能正常运行时因为有上下文,如果单独写到一行就不行,如果在列表上下文中,会得到不同的值 while(<STDIN>){ # 相当于 defined($_ = <STDIN>)print $_; }
2.在列表上下文中使用<STDIN>
# 与while循环不同的地方是必须等列表全部读入之后才会遍历,所以推荐用while foreach (<STDIN>){ print $_; }
3.钻石操作符输入 <>
让程序在处理调用参数的时候,提供类似于标准Unix工具程序的功能, 如cat, sort ,grep 等, 若想处理更复杂的参数格式,则不推荐. 在调用时给出文件名: 如 ./my_program fred battry - roger ; 其中 - 表示标准输入, 其他的为文件名, 省略文件名则默认标准输入.
while(defined($line = <>)){ # 默认从标准输入读取,与<STDIN>一样chomp($line);print $line; } while(<>){... }
4.调用参数 @ARGV
自身程序的名称在变量 $0中, 可以将数组@ARGV当做一般数组处理
@ARGV = qw (first.pl -); while(<>){chomp;print $_;printf("\n"); }
5.输出到标准输出
print操作符会读取一个列表里的所有值,并把每一项(字符串)一次写到标准输出,在它的每一项前后都不会再加上额外的字符. 在使用数组和使用数组内插,在打印效果上不同.
@roger = qw/Roger loger h/; print @roger; # Rogerlogerh printf("\n"); print "@roger"; #Roger loger h
钻石操作符在列表上下文中会返回由许多输入行组成的列表,所以可以配合print使用. print sort <>;
print 有返回值,除非发生了I/O错误,否则总是返回真
注意在改变式子含义的时候使用括号,如 print ((2+3)*4); 如果去掉最外面的括号就会输出5 ,因为它先把print(2+3)输出,在将print的返回值乘以4,但是没有输出.
6.使用printf格式化输出
和C中的printf差不多, 例如,当使用 %g控制符时,会自动选择恰当的数值形式
@myitems = qw(roger loger loger9567); # x 在标量表达式中表示复制,@myitems表示列表元素数量 $myformat = "The items are:\n" . ("%10s\n" x @myitems); printf $myformat,@myitems;
7.文件句柄
Perl程序与外界之间I/O联系的名称, 不一定是文件名.建议使用全大写字母命令文件句柄,保留的句柄名有: STDIN, STDOUT,STDERR,DATA,ARGV,ARGVOUT; 前3个由产生Perl进程的父进程自动打开,如果需要其他文件句柄是,需要使用open操作符打开.
# 和shell的重定向类似,注意文件名前的空格可以区分 > >> 造成的错误! open CONFIG , 'dino'; # 等价于open CONFIG '< dino',用文件句柄CONFIG打开已存在的文件dino,不存在就会无输入 open CONFIG , "> dino" # 将CONFIG打开文件dino,不存在就新建,已有信息会被覆盖 open LOG , ">> logfile" # 追加方式open (HANDLE, "| output-pipe-command"); # 设置一个输出过滤器open (HANDLE, "input-pipe-command |");
8.处理文件打开错误,使用die和系统错误变量 ( $! )
$flag = open(LOG, ">> logfile"); if(!$flag){die "Can't open file logfile!".$!; # 注意有个叹号! }else {print "success!"; } close LOG
如果使用die的时候在后面的字符串中加入的"\n" , 那么输出的时候就不会显示行号和程序的文件名(默认要显示)
9.使用文件句柄
if(! open PASSWORD,"/etc/passwd"){die "How did you get logged in?($!)"; } # 输出: # How did you get logged in?(No such file or directory) at E:\loger9567\perl\five.pl line 2.
实际上行输入操作符由两部分组成,一对尖括号已经里面用来输入的文件句柄, 以写入或添加模式打开的文件可以在print或printf函数中使用, 使用时将它放在关键字之后, 参数列表之前.
open LOG, ">> logfile"; # 注意在LOG后面有逗号 print LOG "Captain's log, stardate 3.14"; # 这样可以将后面的字符串写入到文件中,注意在LOG后面没有逗号 $done = 20; $total = 100; printf STDERR "%d percent complete.\n",$done/$total * 100;
可以使用select操作符来改变默认的文件句柄(STDIN,STDOUT,STDERR), 如使用 select LOG ,那么在输出的时候就不用再print后面加LOG了
一旦使用了默认的文件句柄, 程序就会一直往那里输出, 所以为避免混淆, 使用过后最好还原, 将数据输出到文件是默认会进行缓冲处理, 所以要先将特殊变量( $| )设定为1 $| = 1; 之后再 select STDOUT 即可
10. Perl中的println函数-- say
但是需要每次使用时加上 use 5.010;
use 5.010; say "HELLO";
转载于:https://www.cnblogs.com/roger9567/p/4531558.html
Perl 学习笔记-输入输出相关推荐
- perl学习笔记(9)
我的环境是RHEL5.4,操作系统自带的perl版本是5.8.8.这次打算学习一下如何升级perl到最新版本(升级到其他版本应该是类似的). 到这个页面下载最新版本: http://www.perl. ...
- perl学习笔记(8)
^一行的开头 $一行的结尾 例如/^$/匹配空行. 用\转义特殊字符. //i,后面跟个i不区分大小写. //g,后面跟个g匹配全部.没有g只匹配一次. s///,前面跟个s做替换. grep对列表中 ...
- perl学习笔记(1)
最近想通过51cto和大家分享围绕数据处理分析这一领域的技术经验,正好3月份要完成一项工作任务,主要内容就是修改有关作业调度的perl程序.我用过的语言很多,但是没用过perl,就从这里开始吧. 查看 ...
- perl 中单引号双引号的区别-----perl学习笔记
在perl中给字符串加引号有两种: 1) 单引号: e.g. print 'I MISS YOU " SO MUCH" '; 它将单引号中的内容包括双引号完整输出,同时即使引号中包 ...
- Learning Perl学习笔记(1)第二章Scalar Data
If Control Structure(IF循环) 脚本如下: #!/usr/bin/perl use warnings; use strict; use v5.24; my $line = < ...
- Perl学习笔记(十)--通过DBI访问数据库
Perl访问数据库最常用的包是DBI,可以在www.cpan.org找到.使用ppm命令即可图形化安装.另外还需要安装对应数据库的驱动包,例如DBD::MySQL.DBD::Oracle.DBD::S ...
- Perl学习笔记(2)
在本章中将要学习:(1)如何获得目录列表 (2)如何创建和删除文件 (3)如何创建和删除目录 (4)如何获取关于文件的信息. 一.获得目录列表 目录句柄与文件句柄的不同之处是:文件是通过读取文件句柄获 ...
- perl学习笔记——目录操作
在目录书中移动 chdir 操作副改变当前的工作目录.它和shell中cd命令类似: chdir '/etc' or die "cannot chdir to /etc:$1"; ...
- Perl学习笔记(六)--文件(一)
一.文件描述符: 访问文件时用来代表文件的数字. 它是系统资源,系统限制打开的文件描述符数量. Perl中只在某些系统调用时才使用它 文件句柄: 功能同文件描述符,但是与文件描述符不是一个东西. Pe ...
最新文章
- PL/SQL复合数据类型
- 究竟什么是云原生DevOps呢?
- antd form 初始化时间
- 刷题向》一道逆向思维题(BZOJ1046)(NORMAL)
- 使用Windows 自带防火墙拦截勒索病毒
- 【Python成长之路】python 基础篇 -- 装饰器【华为云分享】
- 一分钟关闭百度的搜索热点和相关人物
- python3 字符串比较_Python3 字符串
- css实现w3cschool广告轮播图
- 纵横算法之五:想学算法,时间不够怎么办
- make config解惑
- securecrt连接虚拟机提示账号密码错误
- Ubuntu之ufw安装和使用
- Python Socket套接字编程
- 35 行代码实现一个简单的 shell
- idea的英文翻译插件安装(Translation)
- WindowBlinds破解全书
- Word 利用 vba 代码实现拆分文档页数
- 智能外呼系统具有你所不知道的四大功能
- IE8兼容的js方法
热门文章
- mysql gman do_使用MySQL UDFs来调用gearman分布式任务分发系统
- 中去掉外键_【Java笔记】035天,MySQL中的增删改查
- python3 tkinter 实现凯撒密码GUI界面
- STL算法入门基础【OI缩水版】
- java a =a-=aa_java 初学 :求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。几个 数相加由键盘控制。...
- php txt 下载文件,PHP下载单个TXT文件
- java模拟多个用户操作,JAVA 模拟多用户提交动作
- Python入门--函数的参数总结
- html之meta标签
- linux 配置mq队列,Apache ActiveMQ 消息队列安装与配置