Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

unwanted ARGV in subroutine

by rizzler (Novice)
on Oct 29, 2012 at 21:43 UTC ( #1001427=perlquestion: print w/ replies, xml ) Need Help??
rizzler has asked for the wisdom of the Perl Monks concerning the following question:

Hi monks,

I have a new problem I cant resolve, I found a nice piece of code on the internet and if I use it in its own small script it works well. The script just adds a header to an already created file. Unfortunately when I use it as part of my larger script I have an issue as @ARGV is used and in my larger script, I actually pass in some arguments. Is there a way to rewrite it so that @ARGV is not used

#/usr/bin/perl use strict; use warnings; sub addheader{ my($infile,$header)=@_; my $text = do { local( @ARGV, $/ ) = $infile ; <> } ; open(FILE,">$infile"); print FILE $header; print FILE $text; close FILE; } my $migfile = "SUBSCRPT_DATA_20121029_11001.DAT"; my $header= "44,,,2\n"; &addheader($migfile,$header);

The following line just hangs when I run the code in my larger script:

my $text = do { local( @ARGV, $/ ) = $infile ; <> } ;

As always, your help is much appreciated

Cheers,

Rizz

Comment on unwanted ARGV in subroutine
Select or Download Code
Re: unwanted ARGV in subroutine
by choroba (Abbot) on Oct 29, 2012 at 21:48 UTC
    my $text = do { local( @ARGV, $/ ) = $infile ; <> } ;
    This should locally change @ARGV to contain $infile and load the whole file into $text. Maybe the file is huge and you have just to wait a bit?
    لսႽ ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ
      And if the file is huge, the OP shouldn't be loading it into memory, and should write to a temp file, and then rename it at the end.

        Hi rizzler

        Try this

        sub addheader{ my($infile,$header)=@_; open(FILE, "$infile"); my $text=do {local $/; <FILE>}; close FILE; open(FILE,">$infile"); print FILE $header; print FILE $text; close FILE; }
Re: unwanted ARGV in subroutine
by rizzler (Novice) on Oct 30, 2012 at 08:43 UTC

    Hi guys,

    perl_walker hit the nail on the head again. It works perfectly.

    Thanks a lot,

    Rizz

      sure, until it doesn't and you don't know why -- at least use autodie;

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (8)
As of 2014-11-01 05:31 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (227 votes), past polls