有太多次写完一个perl程序,需要另外新建一个文件来测试,每次觉得很繁琐,但又不得不这么做。没想到原来perl已经提供了解决方案,这就是DATA。

使用很简单,见下面这个例子:

 #!/usr/bin/perl

 while (<DATA>) {
print;
} __DATA__
hello perl

输出结果: hello perl

这个用法太方便太perl了,以后再也不需要使用新建文件的笨方法了。

下面是解释:

<IN>可以从打开的句柄IN中获得数据,<STDIN>可以从标准输入接收数据,类似地,<DATA> 文件句柄可以直接从执行它的脚本中获取数据,而不是从命令行或者从另一个文件里获取。<DATA> 所读取的数据保存在每个脚本末尾的特殊常量__DATA__之后,同时这个常量也标志着脚本的逻辑结束。

注意:脚本中有两个while(<DATA>)将只有前一个起作用,因为前一个已经读到了文件结尾。比如以下示例:

 #!/usr/bin/perl -w
use strict; while (<DATA>) {
print "$_";
} while (<DATA>) {
print;
} __DATA__
hello world

输出结果:

hello world

而不是:

hello world

hello world

__DATA__

A Virtual File In Perl

It has been occurred a lot of times that one has to test a code using data from a file. It can be anything like checking for a pattern in a file to taking some input. If you want to check the code without opening the file and reading it. One can use the __DATA__ marker provided by perl as a pseudo-datafile.

Steps to follow:
1) At the end of the code use __DATA__ marker and copy paste or write the contents of the file you wish to test exactly from the next line of _DATA_.
2) Use while (){ -- your code here -- }.

#!/usr/bin/perl
use strict;
use warnings;

while () {
chomp $_; 
print "Found" if $_ =~ /(t\w+)/; 
print $1;
}
__DATA__
hello there how r u

Output of the above program will be “there”.

Perl的DATA文件句柄的更多相关文章

  1. perl 通过<<和文件句柄将数据写入到文件中去

    可以通过文件句柄和<<运算符将文件内容写入到文件中去 #!usr/bin/perl -W use strict; use Spreadsheet::ParseExcel; use utf8 ...

  2. perl学习之文件句柄filehandle

    句柄handle 分为文件句柄和目录句柄,文件句柄实际上包含文件,进程和套接字的读写.   文件句柄的操作步骤 open(FD,"filename"); @lines=<FD ...

  3. Perl的IO操作(1):文件句柄

    文件句柄 文件句柄用来对应要操作的文件系统中的文件,这么说不太严谨,但比较容易理解.首先为要打开的文件绑定文件句柄(称为打开文件句柄),然后在后续的操作中都通过文件句柄来操作对应的文件,最后关闭文件句 ...

  4. Perl文件句柄相关常量变量

    文件句柄相关变量 对应的官方手册:http://perldoc.perl.org/perlvar.html#Variables-related-to-filehandles 默认情况下: $/:输入行 ...

  5. Perl输出复杂数据结构:Data::Dumper,Data::Dump,Data::Printer

    输出复杂结构 Data::Dumper.Data::Dump.Data::Printer都可以用来输出复杂的数据结构.本文只介绍简单的几个输出形式,以后再需要的地方再详细介绍. 前两者建议传递数据结构 ...

  6. perl学习(5) 输入和输出

    1.1. 从标准输入设备输入 <STDIN> 行输入操作在到达文件的结尾时将返回undef,在while循环的条件中不能使用chomp: while (defined($line = &l ...

  7. perl常用代码

    字符串联结和重复操作符   联接: .  重复:x  联接且赋值(类似+=): .=例:  $newstring = "potato" . "head";  $ ...

  8. perl 学习笔记

    一:基础 1:安装perl      centos: yum -y install perl       官网:https://www.perl.org/      升级到5.22:先下载,执行./i ...

  9. Perl IO:简介和常用IO模块

    三篇Perl IO基础类文章: Perl的IO操作(1):文件句柄 Perl的IO操作(2):更多文件句柄的模式 Perl文件句柄相关的常见变量 IO对象和IO::Module家族模块 无论是哪种高级 ...

随机推荐

  1. bzoj 1492 [NOI2007]货币兑换Cash(斜率dp+cdq分治)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1492   [题意] 有AB两种货币,每天可以可以付IPi元,买到A券和B券,且A:B= ...

  2. Flex 对Java端返回Collection的处理方法

    将Flex与Spring集成后(BlazeDS 与Spring集成指南 ),第一个面临的问题就是:对于Java端返回的各种Java类型的对象,Flex中能否有相应的数据类型来映射. 处理,尤其是Lis ...

  3. CentOS6.5修改mysql数据文件路径

    1.停止mysql服务      service mysql stop 2.移动数据文件位置(保留原文件权限)      cp -a /var/lib/mysql /mysqldata 3.修改/et ...

  4. HDU ACM 1325 / POJ 1308 Is It A Tree?

    Is It A Tree? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  5. fedora 16安装ByPass四网口网卡遇到的问题

    这个问题困扰了好几天,今天终于在大谷歌的帮助下,在这个网站http://blog.bwysystems.com/bwysystems/?p=16上找到了答案!还是国外的技术论坛强,在百度上搜遍了也没有 ...

  6. LabView中,下拉列表和枚举有什么区别?

    枚举变量只能针对无符号整型数据U32,U16,U8; 而下拉列表则可以包括扩展精度,双精度,单精度,64位.长.双字节.单字节整型以及各种无符号整型(如下图黑色部分). 下拉列表

  7. ThinkPad X200s 安装 Mac OSX

    ===================先说一下注意事项================== 无论任何安装方法(U盘.光盘)不能进入安装界面,或者鼠标无法移动.那就在变色龙引导界面加入以下代码 cpus ...

  8. [置顶] 两台一级域名相同二级域名不同的服务器,怎么共享session

    比如www.hongchangfirst.com和video.hongchangfirst.com两个域名,一级域名相同,二级域名不同.每个服务器运行着不同的功能模块或者不同的子系统,他们使用不同的二 ...

  9. hdoj 5392 Infoplane in Tina Town

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5392 #include<stdio.h> #include<cstring> ...

  10. hdoj 5328 Problems killer

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5328 #include<stdio.h> #include<algorithm> ...