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

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



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,


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

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (5)
As of 2014-08-01 02:41 GMT
Find Nodes?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:

    Results (256 votes), past polls