• 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文件行:

  • 相关阅读:
    SSH_框架整合2—查询显示
    SSH_框架整合1
    eclipse中tomcat发布失败(Could not delete May be locked by another process)原因及解决办法
    错误:javax.servlet.jsp.PageContext can not be to a type
    链表【6】
    欢迎使用CSDN-markdown编辑器
    剑指offer系列62---两个链表的公共结点
    剑指offer系列61---数组中的逆序对
    Git常用命令大全
    vue脚手架搭建的具体步骤
  • 原文地址:https://www.cnblogs.com/f-ck-need-u/p/10791792.html
Copyright © 2020-2023  润新知