in reply to Re: storing all type of vars
in thread storing all type of vars

This code is (in some way) part of a Stack Module. The idea is to store whatever you want.

I first start the Stack Module to store only hash vars.
All the needs grow with time :) and I thought to store whatever I need using the same module.

Sure I could find a Stack module in CPAN (I suspect) but is not funny and I learn less.

Danke busunsl, fine answer.

Sorry for my english (I try to learn too :) ).

Replies are listed 'Best First'.
Re: Re: Re: storing all type of vars
by davorg (Chancellor) on Sep 11, 2001 at 15:28 UTC

    There doesn't seem to be a Stack module on CPAN, but that's probably more to do with the fact that it's simple to implement stacks in Perl using arrays.

    my @stack; push @stack, 'something'; push @stack, 'some thing else'; push @stack, ['something', 'a', 'bit', 'more', 'complex']; my $val = pop @stack;
    --
    <http://www.dave.org.uk>

    Perl Training in the UK <http://www.iterative-software.com>

      Yes!!, your answer make me feel like a fool.

      Using this to store a hash you have to store the reference, isn't it?:
      %hash =(uno=>1, dos=>2); push @stack, \%hash; %hash=%{pop @stack};
      With the stack module you don't have to care about this:
      $stack -> push(%hash); %hash = $stack->pop();
      Perhaps, slight difference to be worth.

        Didn't mean to make you feel foolish :)

        I think that storing references is actually far more flexible as references know what kind of variable they're references to.

        And because most Perl objects are implemented as references, you can even push objects onto your stack without too much extra work.

        This means you can do stuff like this:

        my @stack; push @stack, [ 1 .. 10 ]; # an array push @stack, { one => 1, two => 2 }; # a hash push @stack, 'a scalar'; push @stack, Some::Object->new; my ($scalar, @array, %hash, $obj); while (my $x = pop @stack) { if (my $type = ref $x) { if ($type eq 'ARRAY') { @array = @$x; } elsif ($type eq 'HASH') { %hash = %$x; } else { $obj = $x; } } else { $scalar = $x; } }
        --
        <http://www.dave.org.uk>

        Perl Training in the UK <http://www.iterative-software.com>