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


in reply to Re: Does problem is in the for loop???
in thread Does problem is in the for loop???

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);

Replies are listed 'Best First'.
Re^3: Does problem is in the for loop???
by marto (Cardinal) on May 11, 2015 at 10:00 UTC

    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". ;-)

        Doh! Indeed I am, thanks for pointing this out. Another occasion where I need to take a step back and properly regulate my caffeine/blood level.