加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl输出带颜色行号或普通输出行

发布时间:2020-12-15 23:26:32 所属栏目:大数据 来源:网络整理
导读:定义好了一个可以输出带颜色行号以及行数据的函数print_with_line_num,f()是测试函数。在f()函数中,读取文件并输出读取的每一行数据,但根据参数选项决定是普通输出行还是同时输出带颜色行号的行数据。 这可以当作是偏函数、闭包、作用域的一个用法示例。

定义好了一个可以输出带颜色行号以及行数据的函数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
}

下面是测试效果:

普通输出/etc/hosts文件行:

输出带颜色行号的/etc/hosts文件行:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读