Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

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



Replies are listed 'Best First'.
Re: unwanted ARGV in subroutine
by choroba (Chancellor) 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 questions are moot...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (3)
As of 2017-08-19 00:40 GMT
Find Nodes?
    Voting Booth?
    Who is your favorite scientist and why?

    Results (310 votes). Check out past polls.