in reply to Re: why is my reference taking a while to execute?
in thread why is my reference taking a while to execute?

Hi Chromatic, Yessir. You are right. I tried the following and that output didnt take time. so this:
#!/usr/bin/perl use warnings; use strict; #My First Reference called ref1.pl!! my $array = [qw(this is a test to check anonymous arrays)]; print "@{$array}\n"; print "$array->[3]\n"
gave the following output in no time.
C:\perl\practice>perl ref2.pl this is a test to check anonymous arrays test

Well, if the disk i/os are causing that then that could be a problem for me..... I wanted to create a refence to an anonymous array so that it can hold command line outputs and I can play around with it.....I tried it with  ping localhost command and that took even longer...say about 6 seconds..... May be I shouldnt use reference to anonymous arrays for storing command line outputs..cause that wont be a good way to deal with it.

Note - I wanted to make an anonymous array with words in it...I tried  qw [this is a test to check anonymous arrays]but Perl told me something like "Useless use of a constant..."...so I tried some other ways and finally tried  [qw(this is a test to check anonymous arrays)] and that seems to work.

Is that the right way of creating a reference to an anonymous array with words in it?

Replies are listed 'Best First'.
Re^3: why is my reference taking a while to execute?
by cavac (Prior) on Dec 10, 2011 at 21:51 UTC

    Basically, you are calling an external command, so Windows has to load up cmd.exe (dir is an inbuild command in cmd.exe as far as i know). You could very easy accomplish what you are trying to do within Perl. Doing it within perl also makes it way more portable.

    If you only want the directory listing, you probably just can use glob:

    #!/usr/bin/perl use strict; use warnings; my $files = [glob('*')]; print "@{$files}\n";

    To learn more about glob, typing perldoc -f glob should work. If not, then your ActivePerl*\bin directory is not in your PATH. From memory: Right-clicking on Computer, Properties, Extras, Advanced and then System Variables should let you edit the PATH variables. You'll have to restart open cmd.exe windows (no windows reboot required).

    Want more info about the files, like say file sizes to the file name? You could use hashes to store the data and stat to get the information. Here's a simple example:

    #!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @filenames = glob('*'); my %files; foreach my $fname (@filenames) { my $size = (stat($fname))[7]; $files{$fname} = $size; } print Dumper(\%files);

    For more complicated things like recursive directory traversing you should take a look at CPAN modules like File::Util and/or File::Find.

    But in general, i endorse people new to Perl to at least once code their own recursive finder. It's a nice learning experience and nearly everyone on PerlMonks can help you out if you get stuck.

    Don't use '#ff0000':
    use Acme::AutoColor; my $redcolor = RED();
    All colors subject to change without notice.
      Hi cavac, Thank you for this information. I am looking it up now in perldocs and other resources.
Re^3: why is my reference taking a while to execute?
by chromatic (Archbishop) on Dec 11, 2011 at 00:15 UTC
    May be I shouldnt use reference to anonymous arrays for storing command line outputs...

    The lesson to take from this is that sometimes doing things outside of Perl can be slow. The fact of using an array isn't too relevant here.

    Is that the right way of creating a reference to an anonymous array with words in it?

    The anonymous array construction syntax of the square brackets is separate from the quoting delimiters used with qw//. What you ended up with is fine. (Print the contents of the array created from your first attempt and you'll probably see the problem.)


    Improve your skills with Modern Perl: the free book.