http://qs321.pair.com?node_id=661823


in reply to Re: How to copy an array to a hash?
in thread How to copy an array to a hash?

This may be useful:

my $data = do { local $/ = undef; <INFILE> }; my %edit = split /=|\r\n/, $data;

Hashes are almost like arrays with odd element number. Since split is splitting on new lines and = signs, and you appear to have it this way, it will construct the hash for you.

Hope this helps.

Igor 'izut' Sutton
your code, your rules.

Replies are listed 'Best First'.
Re^3: How to copy an array to a hash?
by CountZero (Bishop) on Jan 11, 2008 at 07:33 UTC
    Good idea! But why use \r\n instead of \n?

    Also it looks like the OP's input file might have empty lines and that could throw the sequence out of sync unless you take special care (perhaps by using \n+ ?).

    CountZero

    A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James

      It seems the OP uses Win32, that's the reason I used \r\n :-) I'm sorry, but I'm on Mac OS X so I can't test the input.

      The \n+ trick does the job, like the example below:

      use Data::Dumper; my $input = <<EOI a = 1 b = 2 c = 3 d = 4 EOI ; # clean empty lines $input =~ s/^\s*$//mg; # construct the dictionary from $input my %dict = split m/\s+=\s+|\n+/, $input; print Dumper \%dict;

      Output:

      $ perl test.pl $VAR1 = { 'c' => '3', 'a' => '1', 'b' => '2', 'd' => '4' };

      Hope this helps!

      Igor 'izut' Sutton
      your code, your rules.

        By using split m/\s+=\s+|\n+/, $input; you don't even have to "clean" empty lines. The \n+ takes care of that.

        \n means linefeed on any OS: it automagically transforms itself in whatever sequence is used in that particular OS.

        The only problem you might encounter is when you use files made under one OS on another OS. Then the line-endings might not match as one expects.

        CountZero

        A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James