perl之中类sed的代码范式

文章介绍了在Perl中使用自定义函数处理Linux和UBOOT配置文件,替换串口波特率的类sed代码范式,通过环境变量设置默认值,并强调了代码组织的便利性。
摘要由CSDN通过智能技术生成

perl之中类sed的代码范式

以下为替换串口的波特率的实例

  1. perl代码,存储为config_uart.pl
#! /usr/bin/perl
use v5.12;
use autodie;
no warnings 'experimental';

################################################################
sub deal_linux
{
    my($file) = @_;
    $^I=".bak";
    @ARGV = ($file);
    my $baudrate = $ENV{BOARD_BAUDRATE}//115200;
    while(<>){
        s/(\s+)(rockchip,baudrate).*/$1$2 = \<$baudrate\>\;/;
        print;
    }
}
sub deal_uboot
{
    my($file) = @_;
    $^I=".bak";
    @ARGV = ($file);
    my $baudrate = $ENV{BOARD_BAUDRATE}//115200;
    while(<>){
        s/(CONFIG_BAUDRATE)=.*/$1=$baudrate/;
        print;
    }
}
sub main
{
    my($type,$file) = @ARGV;

    print "type = $type\n";
    print "file = $file\n";
    given($type){
        when("uboot")       {deal_uboot($file);}
        when("linux")       {deal_linux($file);}
        default             {print "unknown type\n";}
    }
}
################################################################
main
  1. 如何使用
./config_uart.pl uboot ./u-boot/configs/rk3568_defconfig
./config_uart.pl linux linux/arch/arm64/boot/dts/rockchip/rk3568.dts
  1. 以下代码可以从环境变量之中获取波特率,并在没有设置的情况下提供一个默认值
my $baudrate = $ENV{BOARD_BAUDRATE}//115200;
  1. s/string1/string2/是将字符串之中的string1替换成string2
  2. 这种范式不是为了替代sed的功能,只是为了可以将同一功能的多组替换给放到一起,便于管理,也可以使其与繁杂的shell代码分开,方便后续维护
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值