in reply to Simple stack implementation

That's all well and good, if you are trying to learn about stacks.

But if you are trying to make a stack for actuall use in Perl, just use an array. Then you get push and pop free!, plus arrays are like double ended queues, so you get shift and unshift.
See Shift, Pop, Unshift and Push with Impunity! for some good insight into this.

Replies are listed 'Best First'.
Re: Simple stack implementation
by Dominus (Parson) on Nov 18, 2000 at 01:10 UTC
    He did use an array.

      Yes, but the over-head of tieing it to a scalar is excessive.
        I don't think 'excessive overhead' has any meaning without a context. It might be excessive for some applications and not for others.

        And I think the interface is sufficiently interesting that the overhead might be worth spending. Being able to write

        $stack = newitem;
        for a push operation and
        $top = $stack;
        for a pop operation is pretty clever.

        But one thing I would do differently is to resolve the fifo/lifo string to boolean in the TIESCALAR method instead of doing it over and over on every FETCH. Just change the TIESCALAR like this:

        sub TIESCALAR { return unless $_[1] =~ /[fl]i[fl]o/i; my $stack = $_[1] =~ /([fl])i\1o/i; ) return bless [$stack,[]], $_[0]; }
        Then we can eliminate the regex from FETCH; the if line becomes simply:
        if ($_[0]->[0]) {