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

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>

Replies are listed 'Best First'.
Re: Re: Re: Re: storing all type of vars
by eod (Acolyte) on Sep 11, 2001 at 15:49 UTC
    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>