Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: Too much recursion

by blue_cowdawg (Monsignor)
on Jun 27, 2013 at 15:09 UTC ( [id://1041035]=note: print w/replies, xml ) Need Help??


in reply to Too much recursion

      However, although this works, it gives me a deep recursion

I'm not surprised. The question this begs to me is why the recursion. Something like this should suffice:

| hand waving here. while(<$fd>){ next if $_ =~ m/^hostname /; print $_; $tot2++; } $tot++
Now, what is troubling me is when or how your re initializing the vars $tot2 and $tot. That would change my looking logic ever so slightly if I knew that.


Peter L. Berghold -- Unix Professional
Peter -at- Berghold -dot- Net; AOL IM redcowdawg Yahoo IM: blue_cowdawg

Replies are listed 'Best First'.
Re^2: Too much recursion
by jrvd (Novice) on Jun 27, 2013 at 15:29 UTC

    Hi,

    Thanks for your help. I have put my entire code so that you may see where my variables were initialized.

    #!/usr/bin/perl use strict; use warnings; my $fileName = "version.txt"; my $fileDest = "version_modified.txt"; die "Problème d'ouverture du fichier $fileName" unless open(my $fh, '< +', $fileName); die "Problème de création du fichier $fileDest" unless open(my $fd, '> +', $fileDest); my $tot = 0; my $tot2 = 0; sub hostname; sub hostname{ print $fd $_; while (<$fh>){ if ($_ =~ /^hostname /){ hostname; }else{ # print $_; $tot2++; } } $tot++; } while(<$fh>){ hostname if ($_ =~ /^hostname /); } print $tot."\n"; print $tot2."\n"; close $fh; close $fd;

    I am not sure if the code you suggested should only replace a certain part. I might not have correctly expressed what I was looking for however. What I need to do is find the line containing "hostname ", print that, then do some various modifications on the following lines until I find another "hostname " and repeat. Right now, all I was doing was incrementing $tot2 until I got this to work but eventually this will change.

    Thanks!

    jrvd

      Seems like you can do the same without a recursion:

      Update: Add "print $fd $_" to preserve original behavior.

      sub hostname{ print $fd $_; while (<$fh>){ if ($_ =~ /^hostname /){ print $fd $_; $tot++; next; }else{ $tot2++; } } $tot++; # keep initial increment }

        Works exactly the way I need it! Thanks!

        jrvd

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (5)
As of 2024-04-25 14:12 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found