Search code examples
perlperl-moduleperl-data-structures

Substituting variables while reading text file


I have a text file as below and saved it as "file.txt"

"create variable $VAR alarm_object 0"

I am trying to read this in a perl script and printing it by substituting the "$VAR" variable

$VAR = TEMP_VAR
open (FILE,"<", "file.txt") or die $!;
        while (<FILE>) {
                chomp;
                eval(print "$_\n");
        }
        close (FILE);

I need the output as

"create variable TEMP_VAR alarm_object 0"

I tried to achieve this using eval function. It is not working as expected.

How can i achieve this in perl?


Solution

  • eval is too heavy of a tool for this job. Instead, just use a simple search and replace.

    This basically substitutes '$VAR' with $sub for every line of your input file:

    use strict;
    use warnings;
    use autodie;
    
    my $sub = 'TEMP_VAR';
    
    open my $fh, '<', 'file.txt';
    
    while (<$fh>){
        print;             # Before
        s/\$VAR\b/$sub/g;
        print;             # After
    }
    

    Outputs:

    "create variable $VAR alarm_object 0"
    "create variable TEMP_VAR alarm_object 0"