#!/usr/bin/perl use strict; use warnings; my $head = {data => 0, prev => undef, next => undef}; my $previous = $head; while (){ chomp; $previous->{next} = { "data" => $_ , "next" => undef, "prev" => $previous, }; $previous = $previous->{next}; } my $curr = $head; while (1) { last unless defined $curr->{next}; print "Current: ", $curr->{data}, "\tPrevious: ", $curr->{prev}{data} // "", "\tNext: ", $curr->{next}{data} // "", "\n"; $curr = $curr->{next}; } __DATA__ 1 2 3 4 5 #### $ perl doubly_linked.pl Current: 0 Previous: Next: 1 Current: 1 Previous: 0 Next: 2 Current: 2 Previous: 1 Next: 3 Current: 3 Previous: 2 Next: 4 Current: 4 Previous: 3 Next: 5 #### $VAR1 = { 'next' => { 'next' => { 'next' => { 'next' => { 'next' => { 'next' => undef, 'prev' => $VAR1->{'next'}{'next'}{'next'}{'next'}, 'data' => '5' }, 'prev' => $VAR1->{'next'}{'next'}{'next'}, 'data' => '4' }, 'prev' => $VAR1->{'next'}{'next'}, 'data' => '3' }, 'prev' => $VAR1->{'next'}, 'data' => '2' }, 'prev' => $VAR1, 'data' => '1' }, 'prev' => undef, 'data' => 0 };