in reply to Re: variable interpolation
in thread variable interpolation

Hi, I have a line read in perl from a file that itself is a source code for languages like c/sv etc. The variable containing this line contains special characters like %d. When i print this line to another file, the %d is evaluated and a 0 is getting printed. How do i overcome this and tell perl to strictly not interpolate/evaluate any contents of this variable and simply print it as is ! ~Pushkar

Replies are listed 'Best First'.
Re^3: variable interpolation
by GrandFather (Saint) on Feb 27, 2009 at 20:56 UTC

    Show us some sample code! I can think of a number of ways you might get that result, and none of them are good technique.

    Oh, and always use strictures (use strict; use warnings;). You are probably doing something silly that strict would tell you about.


    True laziness is hard work
      Herez the sample code requested :
      open FRH "<File1.txt"; open FWH ">File2.txt"; while($line = <FRH>) { chop($line); printf FWH "$line\n"; } close FRH; close FWH; --------------------------------------------- File1.txt ********* ovm_report_info("DBG_INFO", $psprintf("Num of Register Fields to Progr +am is : %d", m_uint_num_of_reg_fields_to_program), OVM_HIGH); ovm_report_info("DBG_INFO", $psprintf("Programming Bank %d Reg %d", (i +/32), l_uint_reg_num), OVM_HIGH); File2.txt ********* ovm_report_info("DBG_INFO", $psprintf("Num of Register Fields to Progr +am is : 0", m_uint_num_of_reg_fields_to_program), OVM_HIGH); ovm_report_info("DBG_INFO", $psprintf("Programming Bank 0 Reg 0", (i/3 +2), l_uint_reg_num), OVM_HIGH);

      Code tags added by GrandFather

        Use print instead of printf. printf takes a format string which is what was causing your grief. Any special characters you interpolate into the format string will be processed by the printf and parameters will be expected to match them. Strictures would have alerted you to the problem.

        You should also always use the three parameter version of open and check the result. And you should use lexical file handles:

        open my $inFile, '<', $filename or die "Couldn't open $filename: $!";

        Oh, and don't use chop, use chomp instead.


        True laziness is hard work