骏马金龙 (新博客:www.junmajinlong.com)

网名骏马金龙,钟情于IT世界里的各种原理和实现机制,强迫症重症患者。爱研究、爱翻译、爱分享。特借此一亩三分田记录自己成长点滴!!!

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

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

 

转载请注明出处:https://www.cnblogs.com/f-ck-need-u/p/10791792.html

如果觉得文章不错,不妨给个打赏,写作不易,各位的支持,能激发和鼓励我更大的写作热情。谢谢!

posted @   骏马金龙  阅读(882)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示

感谢您的支持

扫描二维码打赏

支付宝打赏