Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

Re^7: Listing of files using glob

by MidLifeXis (Monsignor)
on Jan 05, 2012 at 13:26 UTC ( #946394=note: print w/replies, xml ) Need Help??

in reply to Re^6: Listing of files using glob
in thread Listing of files using glob

> Any errors or wrong approach??

Yep. You never chomp the data read from the filehandle FILE. Since you are building the file name directly from the line read, it most likely contains a newline. If you print your value for $line with a delimiter surrounding it (print "'$line'\n";) you will see what I mean. See chomp (as has been previously mentioned) for a solution.

Update: Since the OP is using $& to populate the hash, and the processing loop uses the keys of the hash as the name of the file, the newline from the file should not be included in the hash key. Nice catch choroba

I wonder what the line endings are in the data file. Is it possible that the file is in DOS line ending format? In which case, the chomp (and $&?) would not do the right thing.


Replies are listed 'Best First'.
Re^8: Listing of files using glob
by choroba (Bishop) on Jan 05, 2012 at 14:03 UTC
    It's a bit more complicated. The OP uses $& as the hash key after matching />.*/, which removes the newline (as . does not match a newline), but it can overwrite a previous hash value if the line does not match, which we cannot tell without seeing the input data.

      Aaah, quite right. I am curious about the line endingness of FILE then (in which case, chomp would not do the right thing either :-/ )


      The input data is like


      Where >1elwA, >1flwA, >1ghwA should be the keys of the hashes and the respective data should be the value of the hash. The code/sub for storing in the file is

      #!/usr/bin/perl my %seqInfo = (); open(FILE, 'test.fasta'); { while(<FILE>) { my $line = $_; if ($line =~ />.*/) { #print "$&\n"; } else { #print "$line\n"; } $seqInfo{$&} = $line; print "$& => $line\n"; } }

      and the output is


      However according to my understanding the output should be like


      Maybe the file is not properly stored as keys and values :( :(

        Thankyou for the replies, Infact I have figured out the problem and have solved it. I have added a counter in it and its working fine + I have replaced the $& character with the similar substr expression as advised. So now the code is working fine. Thanks again for all the replies... :) :) :)

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://946394]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (4)
As of 2018-01-21 00:57 GMT
Find Nodes?
    Voting Booth?
    How did you see in the new year?

    Results (227 votes). Check out past polls.