Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re: Does problem is in the for loop???

by marto (Cardinal)
on May 11, 2015 at 09:30 UTC ( #1126285=note: print w/replies, xml ) Need Help??


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

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1126285]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (9)
As of 2021-01-20 22:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Notices?