3.4.2.2 Arrays as Queues
If we can do stacks, then why not queues? You can build a queue in Perl
by using the unshift and pop functions
together.(9) Think of the unshift function as "enqueue" and the
pop function as "dequeue". Here is an example:
use strict;
my @queue;
unshift (@queue, "Customer 1"); # @queue is now ("Customer 1")
unshift (@queue, "Customer 2"); # @queue is now ("Customer 2" "Customer 1")
unshift (@queue, "Customer 3");
# @queue is now ("Customer 3" "Customer 2" "Customer 1")
my $item = pop(@queue); # @queue is now ("Customer 3" "Customer 2")
print "Servicing $item\n"; # prints: Servicing Customer 1\n
$item = pop(@queue); # @queue is now ("Customer 3")
print "Servicing $item\n"; # prints: Servicing Customer 2\n
This queue example works because unshift places items onto the
front of the array, and pop takes items from the end of the
array. However, be careful using more than two arguments on the
unshift when you want to process an array as a queue. Recall
that unshift places its arguments onto the array in order
as they are listed in the function call. Consider this example:
use strict;
my @notAqueue;
unshift(@notAqueue, "Customer 0", "Customer 1");
# @queue is now ("Customer 0", "Customer 1")
unshift (@notAqueue, "Customer 2");
# @queue is now ("Customer 2", "Customer 0", "Customer 1")
Notice that this variable, @notAqueue, is not really a queue, if
we use pop to remove items. The moral here is to be careful when
using unshift in this manner, since it places it arguments on the
array in order.