如何获取此代码的输出?

时间:2015-03-15 16:46:12

标签: perl

我有一个文件t_code.txt,其中我想用包含PIOMUX_UART1_TXD和{{PIOMUX_UART1_RXD的字符串替换所有出现的字符串@array1TXD 1}}分别然后将其打印在新文件RXD中,但它不起作用

c_code2.txt

2 个答案:

答案 0 :(得分:2)

代码中的几个问题:

  1. 为了能够在替换的替换部分中使用代码,您必须使用/e修饰符。

  2. s///构造中,您无法使用/无引号。更改分隔符,或反斜杠。

  3. 替换中的替换部分是一个字符串。在代码的情况下,它在标量上下文中进行评估。标量上下文中的grep返回匹配数。

  4. 比照:

    #! /usr/bin/perl
    use warnings;
    use strict;
    
    my @array1 = qw( aTXDb cRXDd );
    
    while (<DATA>) {
        s/PIOMUX_UART1_TXD/join q(), grep m=TXD=, @array1/eg;
        s/PIOMUX_UART1_RXD/join q(), grep m=RXD=, @array1/eg;
        print;
    }
    
    __DATA__
    PIOMUX_UART1_TXD
    PIOMUX_UART1_RXD
    

答案 1 :(得分:2)

由于@array1(顺便提一下标识符的可怕选择)在循环内部没有变化,因此最好在外部构建替换字符串,而不是每次进行替换。

目前尚不清楚要将PIOMUX_UART1_TXDPIOMUX_UART1_RXD替换为哪个字符串,但此代码使用逗号连接数组的所有匹配元素并使用它。如果你需要,我希望如何做一些不同的事情。

我还使用了while循环,因为不需要事先将整个文件读入数组。

my ($in_file, $out_file) = qw/ t_code.txt c_code2.txt /;

open my $in_fh,  '<', $in_file  or die qq{Unable to open "$in_file" for reading: $!};
open my $out_fh, '>', $out_file or die qq{Unable to open "$out_file" for writing: $!};

my ($txd) = grep /TXD/, @array1;
my ($rxd) = grep /RXD/, @array1;

while ( <$in_fh> ) {
  s/PIOMUX_UART1_TXD/$txd/g;
  s/PIOMUX_UART1_RXD/$rxd/g;
  print $out_fh $_;
}

close $out_fh or die $!;