Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: Re: Yet Another Tar-Gzip File Expander

by straywalrus (Friar)
on May 14, 2002 at 01:34 UTC ( [id://166346]=note: print w/replies, xml ) Need Help??


in reply to Re: Yet Another Tar-Gzip File Expander
in thread Yet Another Tar-Gzip File Expander

I took your code and down loaded it, then I realized a few things:

A) you left out the first brace on the line
next unless $file =~ /\.t(?:ar\.)?gz\z/); # it should be next unless ($file =~ /\.t(?:ar\.)?gz\z/);
That was not meant to flame you, just to point it out for others who read this.

<ident>B) Your script runs into the same flaw as mine: It expands the archives in the CWD. I read the manual on tar, but it was older than tar, so the option I thought should work didn't. Really all I think I need to do is to change the current working directory to whatever $ARGV[0] is at the time. That should solve it. Thanx again for the regex compression. i re-wrote mine as this:
#!/usr/bin/perl -w $|++; use strict; my (@list, $d, $i); die "Need Directory Param!\n" unless $ARGV[0]; my $cmd = qq/tar -zxvf /; opendir LOCAL,$ARGV[0] || die "Cannot Open dir $ARGV[0]"; @list = readdir LOCAL; foreach $d (0..$#list) { if($list[$d] =~ /.+\.t?(ar\.)?gz/) { qx/$cmd $ARGV[0]\/$list[$d]/; $i++; } } print "$i files expanded!\n"; closedir LOCAL;
Of Course this is still a few lines larger than yours, but you see, this is my code and I kept it how i originally wrote it. No offense to you, but that is your code. Besides the fact that I did not explain my whole purpose in writing this program. I am going to expand this and need to have the directory read into an array for later use. Thanx again.

<straywalrus>

Replies are listed 'Best First'.
Re: Re: Re: Yet Another Tar-Gzip File Expander
by Anonymous Monk on May 14, 2002 at 01:53 UTC

    I would prefer the system() over the qx//. Apart from being more secure, you can test whether the command was successful. At the moment, you are using qx// in void context : capturing the output of the command and ingoring it. This is a waste of memory and CPU cycles.

    I'd write it thus:

    { system("tar", "zxvf", $ARGV[0] . "/$list[$d]") == 0 or print STDERR "Error running tar zxvf on $list[$d]"; $i++; }

    my €0.02

Re: Re: Re: Yet Another Tar-Gzip File Expander
by thelenm (Vicar) on May 14, 2002 at 03:48 UTC
    Thanks for the correction. My code is untested, as you can clearly see. I hope you didn't take my criticisms as flames; publicly-posted code is meant to be scrutinized so that it can be improved. I have more to learn than most people when it comes to improving my code, anyway. :-)

    Oh, as far as the tar command only untar/zipping files in the current directory, you can change your current directory to the appropriate subdirectory by using the chdir command.

      Don't worry I realize that you did not mean to flame me. And I was just flipping through "Perl In a Nutshell" and found chdir, but thanx a lot. And thanks to you I finnaly learned how to use the ?( )? for regex. Thanx for the code improvments. straywalrus

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (6)
As of 2024-04-24 03:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found