• 博客访问： 992234
• 博文数量： 632
• 博客积分： 2778
• 博客等级： 大尉
• 技术积分： 3387
• 用 户 组： 普通用户
• 注册时间： 2012-05-31 09:09

123

2014年（36）

2013年（33）

2012年（563）

2012-12-12 11:23:25

1. printf
2. format

printf方式

1.     %% a percent sign
2.     %c a character with the given number
3.     %s a string
4.     %d a signed integer, in decimal
5.     %u an unsigned integer, in decimal
6.     %o an unsigned integer, in octal
7.     %x an unsigned integer, in hexadecimal
8.     %e a floating-point number, in scientific notation
9.     %f a floating-point number, in fixed decimal notation
10.     %g a floating-point number, in %e or %f notation

11.     %X like %x, but using upper-case letters
12.     %E like %e, but using an upper-case "E"
13.     %G like %g, but with an upper-case "E" (if applicable)
14.     %b an unsigned integer, in binary
15.     %B like %b, but using an upper-case "B" with the # flag
16.     %p a pointer (outputs the Perl value

1.     space prefix non-negative number with a space
2.     + prefix non-negative number with a plus sign
3.     - left-justify within the field
4.     0 use zeros, not spaces, to right-justify
5.     # ensure the leading "0" for any octal,
6.     prefix non-zero hexadecimal with "0x" or "0X",
7.     prefix non-zero binary with "0b" or "0B"

1.     printf '<% d>', 12; # prints "< 12>"
2.     printf '<%+d>', 12; # prints "<+12>"
3.     printf '<%6s>', 12; # prints "< 12>"
4.     printf '<%-6s>', 12; # prints "<12 >"
5.     printf '<%06s>', 12; # prints "<000012>"
6.     printf '<%#o>', 12; # prints "<014>"
7.     printf '<%#x>', 12; # prints "<0xc>"
8.     printf '<%#X>', 12; # prints "<0XC>"
9.     printf '<%#b>', 12; # prints "<0b1100>"
10.     printf '<%#B>', 12; # prints "<0B1100>"

1. sub table {
2.     my (\$values,\$titles) = @_;
3.     my (@max,\$i,\$length,\$format,@items,\$break);
4.     @max = ();
5.     for my \$value (@\$values){
6.         \$i = 0;
7.         for my \$title (@\$titles) {
8.             @max[\$i] ||= length(\$title) + 1;
9.             \$length = 0;
10.             \$length = length(\$value->{\$title}) + 1 if defined \$value->{\$title};
11.             @max[\$i] = (\$length > @max[\$i]) ? \$length : @max[\$i];
12.             \$i++;
13.         }
14.     }
15.     \$format = "";
16.     \$break = '';
17.     for my \$i (@max) {
18.         \$format .= "\%-\$i".'s';
19.         \$break .= '=' x \$i;
20.     }
21.     print(sprintf(\$format,@\$titles));
22.     print(\$break);
23.     for my \$value (@\$values){
24.         @items = ();
25.         for my \$title (@\$titles) {
26.             my \$temp = defined \$value->{\$title} ? \$value->{\$title} : '-';
27.             push(@items,\$temp);
28.         }
29.         print(sprintf(\$format,@items));
30.     }
31.     return;
32. }

format方式

format NAME =
FORMLIST
.

1. 注释,以第一列为 # 来表示.
2. 一个格式行,用来定义一个输出行的格式,就是指上面讲的@,^,<,>,|这样的字符
3. 参数行,数据行,用来向前面的格式行中插入值,都是perl的变量

@          字段(不要同数组符号 @ 相混淆)是普通的字段.

<, >,|     字段的长度通过在格式符号 @,^ 后跟随特定长度的 <, >,| 来定义,同时<,>,| 还分别表示,左对齐,右对齐,居中对齐.如果变量超出定义的长度,那么它将被截断.

\$~ 中 (\$FORMAT_NAME)          格式名字
\$^ (\$FORMAT_TOP_NAME)         当前的表头格式名字存储在
\$% (\$FORMAT_PAGE_NUMBER)      当前输出的页号
\$= (\$FORMAT_LINES_PER_PAGE)   每页中的行数
\$| (\$FORMAT_AUTOFLUSH)      是否自动刷新输出缓冲区存储
\$^L (\$FORMAT_FORMFEED)       在每一页(除了第一页)表头之前需要输出的字符串存储在

1. sub table1 {
2.     my (\$values,\$titles) = @_;
3.     my (@max,\$i,\$length,\$format,\$stdout_top,\$stdout,@items,\$break);
4.     @max = ();
5.     for my \$value (@\$values){
6.         \$i = 0;
7.         for my \$title (@\$titles) {
8.             @max[\$i] ||= length(\$title) + 2;
9.             \$length = 0;
10.             \$length = length(\$value->{\$title}) + 2 if defined \$value->{\$title};
11.             @max[\$i] = (\$length > @max[\$i]) ? \$length : @max[\$i];
12.             \$i++;
13.         }
14.     }

15.     \$format = "";
16.     \$break = '';
17.     for my \$i (@max) {
18.         \$format .= '@' . '<' x \$i;
19.         \$break .= '=' x \$i;
20.     }
21.     \$stdout_top = "format STDOUT_TOP =\n\$format\n\@\\$titles\n\$break\n.";
22.     \$stdout = "format STDOUT =\n\$format\n\@items\n.";

23.     eval \$stdout_top;
24.     eval \$stdout;

25.     for my \$value (@\$values){
26.         @items = ();
27.         for my \$title (@\$titles) {
28.             my \$temp = defined \$value->{\$title} ? \$value->{\$title} : '-';
29.             push(@items,\$temp);
30.         }
31.         \$^ = 'STDOUT_TOP';
32.         \$~ = 'STDOUT';
33.         \$= = 60;
34.         write;
35.     }

36.     return;
37. }

0