FAQ
I want to load the value from scalar variable to a hash

Example:
my $a = "a, 1, b, 2, c, 3";

Now, I need to create a hash %b, which holds values like
%b = { a => 1, b => 2, c => 3 };

TIA.

Search Discussions

  • John W. Krahn at Mar 28, 2008 at 8:18 am

    scooter wrote:
    I want to load the value from scalar variable to a hash

    Example:
    my $a = "a, 1, b, 2, c, 3";

    Now, I need to create a hash %b, which holds values like
    %b = { a => 1, b => 2, c => 3 };
    $ perl -le'
    use Data::Dumper;
    my $a = "a, 1, b, 2, c, 3";
    my %b = $a =~ /[^, ]+/g;
    print Dumper \%b;
    '
    $VAR1 = {
    'c' => '3',
    'a' => '1',
    'b' => '2'
    };


    John
    --
    Perl isn't a toolbox, but a small machine shop where you
    can special-order certain sorts of tools at low cost and
    in short order. -- Larry Wall
  • Sanket vaidya at Mar 31, 2008 at 5:54 am
    Here is the code to accomplish your task.


    use warnings;
    use strict;

    my $a = "a, 1, b, 2, c, 3";

    $a =~ s/ //g; #delete spaces from $a

    my @array = split(",",$a);

    my %b = (
    $array[0] => $array[1],
    $array[2] => $array[3],
    $array[4] => $array[5]
    );

    for (keys%b)
    {
    print "$_ => $b{$_}\n";
    }

    The output is:

    c => 3
    a => 1
    b => 2

    Hope it is useful.


    -----Original Message-----
    From: scooter
    Sent: Friday, March 28, 2008 12:00 PM
    To: beginners@perl.org
    Subject: Load hash from a scalar

    I want to load the value from scalar variable to a hash

    Example:
    my $a = "a, 1, b, 2, c, 3";

    Now, I need to create a hash %b, which holds values like
    %b = { a => 1, b => 2, c => 3 };

    TIA.


    --
    To unsubscribe, e-mail: beginners-unsubscribe@perl.org
    For additional commands, e-mail: beginners-help@perl.org
    http://learn.perl.org/
  • John W. Krahn at Mar 31, 2008 at 7:49 am

    sanket vaidya wrote:
    From: scooter

    I want to load the value from scalar variable to a hash

    Example:
    my $a = "a, 1, b, 2, c, 3";

    Now, I need to create a hash %b, which holds values like
    %b = { a => 1, b => 2, c => 3 };
    Here is the code to accomplish your task.


    use warnings;
    use strict;

    my $a = "a, 1, b, 2, c, 3";

    $a =~ s/ //g; #delete spaces from $a
    You can do that more efficiently with tr///:

    $a =~ tr/ //d; #delete spaces from $a

    my @array = split(",",$a);
    Or you can delete the spaces when you split the string:

    my @array = split / *, */, $a;

    my %b = (
    $array[0] => $array[1],
    $array[2] => $array[3],
    $array[4] => $array[5]
    );
    You can just assign a list directly to a hash:

    my %b = @array;

    Or just assign the list returned from split:

    my %b = split / *, */, $a;

    for (keys%b)
    {
    print "$_ => $b{$_}\n";
    }

    The output is:

    c => 3
    a => 1
    b => 2

    John
    --
    Perl isn't a toolbox, but a small machine shop where you
    can special-order certain sorts of tools at low cost and
    in short order. -- Larry Wall

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupbeginners @
categoriesperl
postedMar 28, '08 at 6:30a
activeMar 31, '08 at 7:49a
posts4
users3
websiteperl.org

People

Translate

site design / logo © 2022 Grokbase