zoukankan      html  css  js  c++  java
  • Perl输出带颜色行号或普通输出行

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

  • 相关阅读:
    py程序----两个判断回文的程序
    Python特性
    python-基本数据类型
    shell编程第一天
    iptables防火墙
    纤维参数测量
    线性代数及其应用(最小二乘、PCA、SVD)
    水流方向检测
    微信跳一跳-MATLAB实现
    相机标定opencv实现
  • 原文地址:https://www.cnblogs.com/f-ck-need-u/p/10791792.html
Copyright © 2011-2022 走看看