You are reading the name of the file you wish to process from
STDIN but you have not
chomped the newline from the string so your
open will fail. BTW, it is now recommended to use lexical filehandles and the three argument form of
open.
use strict;
use warnings;
my $inputFile = <>;
open my $inputFH, q{<}, $inputFile
or die qq{open: < $inputFile: $!\n};
This produces
$ cat spw718152.dat
SNPSTER2_50_3_1_119_588 10
SNPSTER2_50_3_1_121_522 16
SNPSTER2_50_3_1_119_260 27
$ ./spw718152
spw718152.dat
Unsuccessful open on filename containing newline at ./spw718152 line 8
+, <> line 1.
open: < spw718152.dat
: No such file or directory
$
Adding the chomp will allow the file to open. Using map and taking advantage of the default behaviour of split, which is to operate on $_ splitting on whitespace (including newlines) and discarding empty trailing fields, gives us this.
use strict;
use warnings;
use Data::Dumper;
chomp( my $inputFile = <> );
open my $inputFH, q{<}, $inputFile
or die qq{open: < $inputFile: $!\n};
my %dataItems =
map { split }
<$inputFH>;
close $inputFH
or die qq{close: < $inputFile: $!\n};
print Data::Dumper->Dumpxs( [ \ %dataItems ], [ q{*dataItems} ] );
Which produces.
$ ./spw718152
spw718152.dat
%dataItems = (
'SNPSTER2_50_3_1_121_522' => '16',
'SNPSTER2_50_3_1_119_588' => '10',
'SNPSTER2_50_3_1_119_260' => '27'
);
$
I hope this is of interest.
Cheers,
JohnGG
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.