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 学习笔记-输入输出相关推荐

  1. perl学习笔记(9)

    我的环境是RHEL5.4,操作系统自带的perl版本是5.8.8.这次打算学习一下如何升级perl到最新版本(升级到其他版本应该是类似的). 到这个页面下载最新版本: http://www.perl. ...

  2. perl学习笔记(8)

    ^一行的开头 $一行的结尾 例如/^$/匹配空行. 用\转义特殊字符. //i,后面跟个i不区分大小写. //g,后面跟个g匹配全部.没有g只匹配一次. s///,前面跟个s做替换. grep对列表中 ...

  3. perl学习笔记(1)

    最近想通过51cto和大家分享围绕数据处理分析这一领域的技术经验,正好3月份要完成一项工作任务,主要内容就是修改有关作业调度的perl程序.我用过的语言很多,但是没用过perl,就从这里开始吧. 查看 ...

  4. perl 中单引号双引号的区别-----perl学习笔记

    在perl中给字符串加引号有两种: 1) 单引号: e.g. print 'I MISS YOU " SO MUCH" '; 它将单引号中的内容包括双引号完整输出,同时即使引号中包 ...

  5. Learning Perl学习笔记(1)第二章Scalar Data

    If Control Structure(IF循环) 脚本如下: #!/usr/bin/perl use warnings; use strict; use v5.24; my $line = < ...

  6. Perl学习笔记(十)--通过DBI访问数据库

    Perl访问数据库最常用的包是DBI,可以在www.cpan.org找到.使用ppm命令即可图形化安装.另外还需要安装对应数据库的驱动包,例如DBD::MySQL.DBD::Oracle.DBD::S ...

  7. Perl学习笔记(2)

    在本章中将要学习:(1)如何获得目录列表 (2)如何创建和删除文件 (3)如何创建和删除目录 (4)如何获取关于文件的信息. 一.获得目录列表 目录句柄与文件句柄的不同之处是:文件是通过读取文件句柄获 ...

  8. perl学习笔记——目录操作

    在目录书中移动 chdir 操作副改变当前的工作目录.它和shell中cd命令类似: chdir '/etc' or die "cannot chdir to /etc:$1"; ...

  9. Perl学习笔记(六)--文件(一)

    一.文件描述符: 访问文件时用来代表文件的数字. 它是系统资源,系统限制打开的文件描述符数量. Perl中只在某些系统调用时才使用它 文件句柄: 功能同文件描述符,但是与文件描述符不是一个东西. Pe ...

最新文章

  1. PL/SQL复合数据类型
  2. 究竟什么是云原生DevOps呢?
  3. antd form 初始化时间
  4. 刷题向》一道逆向思维题(BZOJ1046)(NORMAL)
  5. 使用Windows 自带防火墙拦截勒索病毒
  6. 【Python成长之路】python 基础篇 -- 装饰器【华为云分享】
  7. 一分钟关闭百度的搜索热点和相关人物
  8. python3 字符串比较_Python3 字符串
  9. css实现w3cschool广告轮播图
  10. 纵横算法之五:想学算法,时间不够怎么办
  11. make config解惑
  12. securecrt连接虚拟机提示账号密码错误
  13. Ubuntu之ufw安装和使用
  14. Python Socket套接字编程
  15. 35 行代码实现一个简单的 shell
  16. idea的英文翻译插件安装(Translation)
  17. WindowBlinds破解全书
  18. Word 利用 vba 代码实现拆分文档页数
  19. 智能外呼系统具有你所不知道的四大功能
  20. IE8兼容的js方法

热门文章

  1. mysql gman do_使用MySQL UDFs来调用gearman分布式任务分发系统
  2. 中去掉外键_【Java笔记】035天,MySQL中的增删改查
  3. python3 tkinter 实现凯撒密码GUI界面
  4. STL算法入门基础【OI缩水版】
  5. java a =a-=aa_java 初学 :求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。几个 数相加由键盘控制。...
  6. php txt 下载文件,PHP下载单个TXT文件
  7. java模拟多个用户操作,JAVA 模拟多用户提交动作
  8. Python入门--函数的参数总结
  9. html之meta标签
  10. linux 配置mq队列,Apache ActiveMQ 消息队列安装与配置