http://www.perlmonks.org?node_id=1126285


in reply to Does problem is in the for loop???

Please copy and paste the code you're actually running, this does not run:

Global symbol "@uut_name" requires explicit package name at derp.pl li +ne 15. Global symbol "@enable_nets" requires explicit package name at derp.pl + line 16. Execution of derp.pl aborted due to compilation errors.

Update: You say you're successfully writing something to a file, the code you've posted doesn't do this the way you expect. For clarity, show us what you expect the output to be. Also use the three argument open, and report the reason for failures as documented in open. How do I post a question effectively? has tips on asking for help.

Replies are listed 'Best First'.
Re^2: Does problem is in the for loop???
by sumathigokul (Acolyte) on May 11, 2015 at 09:39 UTC

    Here is the code....

    use strict; use warnings; open (IN1, "<XOR_portmap.txt") or die; open (IN2, "<uut_names.txt") or die; open (IN3, "<nets.txt") or die; open (IN4, "<enabled_nets.txt") or die; open (OUT, ">>XOR_portmap_nets.txt") or die; my @uut_names = <IN2>; my @nets = <IN3>; my @enabled_nets = <IN4>; chomp @uut_names; chomp @nets; chomp @enabled_nets; while (<IN1>) { foreach my $i ( 0..$#nets ) { print OUT if ((s/m/$uut_names[$i]/) && (s/in1/$nets[$i]/) && ( +s/output/$enabled_nets[$i]/)); } } close (IN1); close (IN2); close (IN3); close (IN4); close (OUT);

      Update: Ignore this post, see Re^4: Does problem is in the for loop???.

      Are you sure this is your code?

      print OUT if ((s/m/$uut_names[$i]/) && (s/in1/$nets[$i]/) && (s/output +/$enabled_nets[$i]/));

      You say that "it is writing first element alone in XOR_portmap_nets file" but there is no output being written to file here. There are a few issues here, the tutorial Basic debugging checklist mentions three questions which you need to understand:

      • Are you sure your data is what you think it is?
      • Are you sure your code is what you think it is?
      • Are you inadvertently ignoring error and warning messages?
        print OUT if ((s/m/$uut_names[$i]/) && (s/in1/$nets[$i]/) && (s/output/$enabled_nets[$i]/));

        there is no output being written to file here

        You are missing the while (<IN>) { ... } loop around this statement. print defaults to writing $_ when called without arguments or only a file handle.

        Stupid demo:

        >perl -E "open IN,'<','/etc/group'; open OUT,'>','/tmp/foo'; while (<I +N>) { print OUT if /adm/; } close OUT; close IN;" >cat /tmp/foo sys:x:3:root,bin,adm adm:x:4:root,adm,daemon disk:x:6:root,adm >

        Alexander

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)