- 浏览: 578367 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (200)
- html css (6)
- javascript (11)
- php (6)
- java基础 (18)
- mysql (8)
- ssh (7)
- linux (21)
- 杂想 (1)
- 搜索引擎 (2)
- linux-shell (2)
- perl (61)
- 单元测试 (1)
- jquery (1)
- xml (1)
- 求职招聘 (1)
- 其他 (2)
- 项目工具 (2)
- maven (10)
- ant (1)
- eclipse (3)
- windows (4)
- java (8)
- jsp (1)
- c c++ (7)
- java-web (3)
- 汇编 (1)
- 正则表达式 (2)
- 网络 (1)
- 路由 (1)
- ip (1)
- 测试驱动开发 (1)
- tdd (1)
- vim (1)
- powermock (1)
- junit (1)
- spring (1)
- spring security (1)
- httpclient (1)
- sql (1)
- sqlserver (2)
- 存储过程 (1)
- apache (1)
- Nexus (1)
- 金融 (1)
- clojure (4)
- 函数式编程 (3)
- 工作 (1)
- git (2)
- java 并发 (1)
- python (1)
- java netty proxy (1)
- scala (1)
最新评论
-
springmvc-freemarker:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
eclipse 配置maven web项目 -
zk1878:
huzhenyu 写道楼主很用心,讲得十分清楚,非常实用!呵呵 ...
eclipse 配置maven web项目 -
huzhenyu:
楼主很用心,讲得十分清楚,非常实用!
eclipse 配置maven web项目 -
宋建勇:
不错,对CountDownLatch了解加深了!
java 多线程 CountDownLatch用法 -
zk1878:
必须的。。。。
perl下载图片
原文:http://man.ddvip.com/web/perl/perl10.htm
第十章 格式化输出
二、显示打印格式
三、在打印格式中显示值
1、通用的打印格式
2、格式和局域变量
3、选择值域格式
4、输出值域字符
四、输出到其它文件
五、分页
六、格式化长字符串
七、用printf格式化输出
我们已经见过用print函数将原始的未格式化的文本输出到文件,本章讲述如何用函数write和打印格式来生成格式化的输出。
一、定义打印格式
定义打印格式的关键字为format,语法为:format formatname =
打印格式名formatname的命名规则与一般变量相同。结束行为一个句号,此行不能有任何其它字符,包括空格,句号必须是该行第一个字符。
lines_of_output
.
打印格式的定义象子程序一样可以放在任何地方,甚至可以放在条件语句中,但是最好把它们集中放在程序的开头或结尾。
二、显示打印格式
打印格式的显示有两步:
1、将系统变量$~设成所要使用的格式
2、调用函数write
例如:1 : #!/usr/local/bin/perl
结果输出如下:
2 :
3 : $~ = "MYFORMAT";
4 : write;
5 :
6 : format MYFORMAT =
7 : ===================================
8 : Here is the text I want to display.
9 : ===================================
10: .$ program
如果不用$~指定打印格式,Perl解释器就假定要使用的格式名与要写入的文件变量同名,在本例中,如果不指定使用MYFORMAT,则Perl解释器试图使用名为STDOUT的打印格式。
===================================
Here is the text I want to display.
===================================
$
三、在打印格式中显示值
我们使用打印格式的主要原因当然是格式化存贮在简单变量或数组变量中的值从而生成可读性好的输出,这一目的用“值域”来实现。每个值域指定一个值,如变量或表达式,调用write函数时,该值就以值域指定的格式显示。
1、通用的打印格式
打印格式的一个缺点是定义中包含了变量名,例如:format MYFORMAT =
当调用write输出此格式时,必须记着它使用了变量$winnum。用子程序和局域变量就可以创建更通用的打印格式。下例从STDIN输入一个文件并输出五个出现频率最高的字母及出现次数。
==========================================================
The winning number is @<<<<<<!
$winnum
==========================================================
.1 : #!/usr/local/bin/perl
运行结果如下:
2 :
3 : while ($line = ) {
4 : $line =~ tr/A-Z/a-z/;
5 : $line =~ s/[^a-z]//g;
6 : @letters = split(//, $line);
7 : foreach $letter (@letters) {
8 : $lettercount{$letter} += 1;
9 : }
10: }
11:
12: $~ = "WRITEHEADER";
13: write;
14: $count = 0;
15: foreach $letter (reverse sort occurrences
16: (keys(%lettercount))) {
17: &write_letter($letter, $lettercount{$letter});
18: last if (++$count == 5);
19: }
20:
21: sub occurrences {
22: $lettercount{$a} <=> $lettercount{$b};
23: }
24: sub write_letter {
25: local($letter, $value) = @_;
26:
27: $~ = "WRITELETTER";
28: write;
29: }
30: format WRITEHEADER =
31: The five most frequently occurring letters are:
32: .
33: format WRITELETTER =
34: @: @<<<<<<
35: $letter, $value
36: .
2、格式和局域变量$ program
This is a test file.
This test file contains some input.
The quick brown fox jumped over the lazy dog.
^D
The five most frequently occurring letters are:
t: 10
e: 9
i: 8
s: 7
o: 6
$
在上例中,你可能已经注意到子程序write_letter调用write输出字母及其出现次数,即使格式定义在子程序外部仍能正常工作。在第17行中将字母及其出现次数传递给该子程序,在子程序中,打印格式使用局域变量$letter和$value,这样保证了在foreach循环中每次输出当前的字母和值。
然而要注意的是,使用my定义的局域变量要求格式定义在子程序内部,否则就不会输出,因此,用write输出的局域变量一定要用local定义。(local和my详见《子程序》一章)
注:Perl4中没有my函数,故不会有此问题。
3、选择值域格式
我们已经知道了打印格式和write函数怎么工作,现在来看看值域的格式,见下表:
每个值域的第一个字符是行填充符,当使用@字符时,不做文本格式化。对文本的格式化稍后来讲。
格式
值域含义
@<<<
左对齐输出
@>>>
右对齐输出
@|||
中对齐输出
@##.##
固定精度数字
@*
多行文本
在上表中,除了多行值域@*,域宽都等于其指定的包含字符@在内的字符个数,例如:
@###.##
表示七个字符宽,小数点前四个,小数点后两个。
4、输出值域字符
在打印格式里,特定字符如@、<和>被看作值域定义,那么如何将它们输出呢?方法如下:format SPECIAL =
四、输出到其它文件
This line contains the special character @.
"@"
.
缺省地,函数write将结果输出到标准输出文件STDOUT,我们也可以使它将结果输出到任意其它的文件中。最简单的方法就是把文件变量作为参数传递给write,如:
write (MYFILE);
这样,write就用缺省的名为MYFILE的打印格式输出到文件MYFILE中,但是这样就不能用$~变量来改变所使用的打印格式。系统变量$~只对缺省文件变量起作用,我们可以改变缺省文件变量,改变$~,再调用write,例如:
select (MYFILE);
$~ = "MYFORMAT";
write;
当select改变缺省文件变量时,它返回当前缺省文件变量的内部表示,这样我们就可以创建子程序,按自己的想法输出,又不影响程序的其它部分,如下:sub write_to_stdout {
五、分页
local ($savefile, $saveformat);
$savefile = select(STDOUT);
$saveformat = $~;
$~ = "MYFORMAT";
write;
$~ = $saveformat;
select($savefile);
}
在输出到打印机时,可以在每页顶部输出相应的信息,这样的特殊文本叫页眉。定义页眉实际上就是定义名为filename_TOP的打印格式,例如给标准输出文件定义页眉如下:
format STDOUT_TOP =
Consolidated Widgets Inc. 1994 Annual Report
.
在页眉的定义中也可以包含值域,页眉中经常使用的一个特殊值是当前页码,存贮在系统变量$%中,如:
format STDOUT_TOP =
Page @<<.
$%
.
我们也可以通过改变系统变量$^改变定义页眉的打印格式名,与$~一样,$^只对当前缺省文件起作用,因此可以与select函数结合使用。
缺省情况下,每页长度为60行,可以通过改变$=来改变页长,如:
$= = 66; #页长设为66行
此赋值语句必须出现在第一个write语句前。
注:一般使用分页机制时不用print函数,因为当用write输出时,Perl解释器跟踪每页的当前行号。如果必须使用print而又不打乱页计数,可以调整系统变量$-。$-的含义是当前行到页末之间的行数,当$-达到零时,就开始新的一页,调整方法如:
print ("Here is a line of output\n");
$- -= 1;
六、格式化长字符串
我们已经学过值域@*可以输出多行文本,但它完全将字符串原样输出,不加以格式化。在Perl中对长字符串(包含换行)进行格式化的值域定义很简单,只需把打头的@字符换成^就行了,这种文本格式化中,Perl解释器在一行中放置尽可能多的单词。每当输出一行文本,被输出的子串就从变量中删除,再次在域值中使用该变量就把剩下的字符串继续按格式输出。当内容已输出完毕,该变量就成了空串,再输出就会输出空行,为避免输出空行,可以在值域格式行首加一个~字符。见下例:1 : #!/usr/local/bin/perl
运行结果如下:
2 :
3 : @quotation = <STDIN>;
4 : $quotation = join("", @quotation);
5 : $~ = "QUOTATION";
6 : write;
7 :
8 : format QUOTATION =
9 : Quotation for the day:
10: -----------------------------
11: ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
12: $quotation
13: ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
14: $quotation
15: ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
16: $quotation
17: -----------------------------
18: .$ program
如果把打印格式中行首的~字符去掉,上面的输出结果中就会多一行空行。很明显,当字符串长度不明确时,这种用法很不方便,原因就在于它指明了输出的行数上限,超过这一上限的字符就不会被输出,解决方法很简单,就是在域值格式行首加两个~字符,这样就会持续按格式输出文本直到输出完毕,用此方法把上述程序改写如下:
Any sufficiently advanced programming
language is indistinguishable from magic.
^D
Quotation for the day:
-----------------------------
Any sufficiently advanced programming language is
indistinguishable from magic.
-----------------------------
$1 : #!/usr/local/bin/perl
这样运行结果相同。
2 :
3 : @quotation = <STDIN>;
4 : $quotation = join("", @quotation);
5 : $~ = "QUOTATION";
6 : write;
7 :
8 : format QUOTATION =
9 : Quotation for the day:
10: -----------------------------
11: ~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
12: $quotation
13: -----------------------------
14: .
七、用printf格式化输出
还有一种容易掌握和使用的格式化输出函数,那就是printf,它与C语言中的printf基本上是相同的。printf有两个参数,一个是字符串,其中含有一个或多个域值形式,另一个是与各域值相对应的变量值按一定格式替换,如:
printf("The number I want to print is %d.\n", $number);
各种域值形式如下表:
一些使用细节如下:
域值
含义
%c
单个字符
%d
十进制整数
%e
科学计数法形式的浮点数
%f
普通形式(定点)浮点数
%g
紧缩形式浮点数
%o
八进制整数
%s
字符串
%u
无符号整数
%x
十六进制整数
1、在格式d、o、u或x中,如果整数值较大或可能较大,可加个l字符,意为长整型,如%ld。
2、%字符后加正整数表示该域的最小宽度,如果输出结果宽度不足,则向右对齐,前面用空格补足,如果该正整数以数字0打头,则补足字符为0。若%字符后为负整数,则结果向右对齐。
3、浮点数域值(%c、%f和%g)中可以指定小数点前后的宽度,如%8.3f意为总宽度为8个字符,小数点后(即小数部分)为3个字符,多出的小数部分四舍五入。
4、在整数、字符或字符串的值域中使用如上的小数形式n.m,整数部分n为总宽度,小数部分m为输出结果的最大宽度,这样就保证了输出结果前至少有n-m个空格。
发表评论
-
perl http模块总结
2013-04-04 23:51 5772perl发送http请求主要有 LWP,UserAgent ... -
perl json
2013-04-03 20:51 4113http://search.cpan.org/~makam ... -
perl xml json
2012-09-14 19:52 1280use XML::XML2JSON; ... -
perl源文件编码类型导致乱码问题
2012-09-11 09:28 2298$str = '中国'; chdir 'E:\jo ... -
perl 解析html, 自己写的几个比较常用方法
2012-09-04 20:56 7202perl解析html, 比较常用的模块是 HTML::Tree ... -
perl多进程示例
2012-08-17 15:33 1922以下例子,在主进程生成3个子进程,然后再收割每个子进程,防 ... -
一段实用的perl脚本
2012-08-15 20:53 2343下面的脚本实现了在命令行直接执行perl语句或是执行 ... -
perl发送http请求,easy之极
2012-08-09 23:21 15985perl 发送http 非常之简单,发送get请求 只一 ... -
perl 操作mysql
2012-04-27 07:57 1179use DBI; @driver_names = ... -
Perl 中的线程
2012-03-31 22:19 1472原文:http://www.ibm.com/developer ... -
perl smtp 发送邮件
2012-03-20 23:44 4983原文:http://blog.chinaunix.net/ui ... -
perl开启并关闭w32进程
2012-03-05 16:31 1976perl是个很强大的脚本语言,cpan包罗万象的 ... -
perl发送http请求
2012-02-16 17:51 5187下面是一段perl发送http请求的代码,设置了请求头,表单参 ... -
perl对windows的进程的一些常用操作
2012-02-16 17:52 20561、获取所有正在运行的进程,用到了cpan的Win32::Pr ... -
perl查看已经安装的模块
2012-02-16 17:53 1381use ExtUtils::Installed; my ... -
在Perl调用C/C++代码/动态链接库
2012-02-10 17:46 6407原文http://manew.org/?p=62 perl想 ... -
perl 剪贴板操作
2012-02-09 14:05 1645以下代码设置剪贴板内容为 hello world,然后读取剪贴 ... -
perl 文件目录的创建删除拷贝
2012-01-11 18:03 5257以下三个是核心包提供的 1 unlink @files ... -
perl正则表达式中该注意的一个问题
2011-12-29 00:06 1198请看以下例子 代码1 $a='abc123EEE11 ... -
perl 目录遍历
2011-12-16 10:27 2368使用perl的 File::Find模块,目录遍历将会很简单, ...
相关推荐
在Perl编程语言中,格式化输出是处理数据呈现的关键技能之一。通过掌握`printf`、`sprintf`以及`write`函数的使用,可以实现对输出数据的精确控制,确保其符合预期的格式要求。本文将深入探讨如何利用Perl中的`write...
分享一个 刚写的 perl 格式化 json串 的方法 原字符串 {"abc":"123","def":"456"} 输出后 ---------- perl ---------- { "abc":"123", "def":"456" }
Perl 5 Enterprise Environment (P5EE) 是这个指南的核心,它是一个面向企业的Perl 5开发环境,其目标是确保代码的标准化和一致性。 首先,文档指出编码规则应该基于Perl 5.005_03版本,尽管后来的Perl 5.6引入了...
在这个上下文中,Perl可能被用来辅助Verilog工具的实现,比如自动格式化、生成Testbench或编译过程中的一些文本处理任务。 这些工具的组合使用可以显著提升Verilog开发的效率,减少手动工作,同时保证代码质量。...
`printf` 函数类似于C语言中的 `printf`,允许格式化输出。它可以指定输出格式,并按照指定的格式输出数据。使用方法如下: ```perl printf "The value is %d and the string is %s\n", 42, "Perl"; ``` 在这个例子...
"json格式化工具"是用来帮助开发者处理和查看JSON数据的软件。这类工具的主要功能包括: 1. **美化输出**:将紧凑的JSON字符串转换成具有缩进和换行的易读格式,便于理解和调试。 2. **验证格式**:检查输入的JSON...
- **格式化输出**:通过printf函数,Perl可以实现灵活的格式化输出。 - **标准输入输出流**:Perl支持标准输入输出流,如STDIN/STDOUT/STDERR。 #### 4. 模块和库 - **模块系统**:Perl拥有庞大的模块生态系统,...
`print`函数用于向标准输出(STDOUT)发送字符串,而`printf`则提供更精细的格式化输出功能,允许开发者指定输出格式,如`printf("The name is %s and the number is %d\n", "John", 50)`,其中`%s`和`%d`分别表示...
使用printf格式化输出 文件句柄 打开文件句柄 用die处理严重错误 使用文件句柄 复用标准文件句柄 使用say来输出 习题 第六章哈希 什么是哈希? 访问哈希元素 哈希函数 哈希的典型应用 %env哈希 习题 ...
`printf`函数用于格式化输出,`<STDIN>`则用于读取标准输入的列表数据。 #### 六、哈希表(关联数组) **知识点10:哈希与键值对** 哈希是另一种重要的数据结构,用于存储键值对。与数组不同,哈希中的元素通过键...
- **格式化输出**:使用`printf`函数进行格式化输出。 - **标准输入输出**:使用`<STDIN>`读取用户输入,使用`print`或`print STDOUT`进行标准输出。 以上内容涵盖了Perl语言的基础知识点,对于初学者来说是很好的...
- `printf`函数用于格式化字符串并输出到指定位置。 #### join - `join`函数用于将数组中的元素连接成一个字符串。 #### 转义字符表示 - 使用`\`来转义特殊字符,如`\n`表示换行。 #### 引用、符号引用、指针 ...
这四个组件协同工作,确保日志信息能够按照开发者的需求进行记录、格式化和输出。 1. **Logger**:Logger是日志系统的核心,负责生成日志事件。它包含多个级别,如DEBUG、INFO、WARN、ERROR和FATAL,允许开发者根据...
2. **数据格式化与输出**:在描述中提到,Perl脚本会根据既定格式输出数据。这意味着你需要处理从Excel中读取的值,可能包括数字、日期、字符串等,并将其转换为所需的格式。例如,你可能需要将日期从Excel的内置...
7. **报告生成**:在仿真完成后,Perl可以用于整理和格式化输出结果,生成详细的测试报告,便于团队成员之间分享和讨论。 在实际应用中,Perl脚本的编写需要对FPGA设计流程和仿真环境有深入理解,同时也需要掌握...