定义好了一个可以输出带颜色行号以及行数据的函数print_with_line_num,f()是测试函数。在f()函数中,读取文件并输出读取的每一行数据,但根据参数选项决定是普通输出行还是同时输出带颜色行号的行数据。
脚本内容如下:
#!/usr/bin/perl -w use strict; use 5.010; # print string with colored line_num # arg1: line num # arg2: string to print sub print_with_line_num { eval 'use Term::ANSIColor'; my $line_num = shift; my $string = shift; my $color = 'bold yellow'; print colored($line_num,$color),":","$string"; } # test function # arg1: filename for read and print # arg2: a bool to control whether print line num sub f { my $filename = shift; # arg: print_line_num or not?(bool) my $print_line_num = shift; # initialize line_num my $line_num = 1; # define a printer,according to the bool of print_line_num,# choose how to print string my $myprinter; { if($print_line_num){ # print line num # specify the arg1 to line_num $myprinter = sub { print_with_line_num "$line_num",@_; } } else { # don't print line num,# so make a simple wrapper for builtin print function $myprinter = sub { print @_; }; } } open my $fh,"$filename" or die "open Failed: $!"; while(<$fh>){ $myprinter->($_); $line_num++; } } if ($ARGV[0] eq "-n"){ f($ARGV[1],1); # print every line with colored line num } else { f($ARGV[0]); # print every line normally }
下面是测试效果: