#!/usr/bin/perl -w use strict; my %HASH = ( A => 1, B => 2, C => 3, D => 4, E => 5 ); my $HASHREF = \%HASH; my @ARRAY = ( 1 .. 5 ); my $ARRAYREF = \@ARRAY; my $SCALAR = "strings_are_scalar"; my $SCALARREF = \$SCALAR; sub CODE { rand } my $CODEREF = \&CODE; sub print_calling_line { my $actual_line = shift; my $caller_line = (caller)[2]; my $different = $actual_line != $caller_line ? "***" : ""; printf "%3s Called from line %2d; caller() reports line %2d [args: @_]\n", $different, $actual_line, $caller_line; } print "\n"; print_calling_line( __LINE__, %HASH ); print_calling_line( __LINE__, $HASHREF ); print_calling_line( __LINE__, %{$HASHREF} ); print_calling_line( __LINE__, $HASH{A} ); print_calling_line( __LINE__, $HASHREF->{A} ); print_calling_line( __LINE__, @HASH{qw(B C D)} ); print_calling_line( __LINE__, @{$HASHREF}{qw(B C D)} ); print "\n"; print_calling_line( __LINE__, %HASH ); print_calling_line( __LINE__, $HASHREF ); print_calling_line( __LINE__, %{$HASHREF} ); print_calling_line( __LINE__, $HASH{A} ); print_calling_line( __LINE__, $HASHREF->{A} ); print_calling_line( __LINE__, @HASH{qw(A)} ); print_calling_line( __LINE__, @{$HASHREF}{qw(A)} ); print "\n"; print_calling_line( __LINE__, @ARRAY ); print_calling_line( __LINE__, $ARRAYREF ); print_calling_line( __LINE__, @{$ARRAYREF} ); print_calling_line( __LINE__, $ARRAY[0] ); print_calling_line( __LINE__, $ARRAYREF->[0] ); print_calling_line( __LINE__, @ARRAY[2 .. 4] ); print_calling_line( __LINE__, @{$ARRAYREF}[2 .. 4] ); print "\n"; print_calling_line( __LINE__, @ARRAY ); print_calling_line( __LINE__, $ARRAYREF ); print_calling_line( __LINE__, @{$ARRAYREF} ); print_calling_line( __LINE__, $ARRAY[0] ); print_calling_line( __LINE__, $ARRAYREF->[0] ); print_calling_line( __LINE__, @ARRAY[2 .. 4] ); print_calling_line( __LINE__, @{$ARRAYREF}[2 .. 4] ); print "\n"; print_calling_line( __LINE__, $SCALAR ); print_calling_line( __LINE__, $SCALARREF ); print_calling_line( __LINE__, ${$SCALARREF} ); print "\n"; print_calling_line( __LINE__, $SCALAR ); print_calling_line( __LINE__, $SCALARREF ); print_calling_line( __LINE__, ${$SCALARREF} ); print "\n"; print_calling_line( __LINE__, &CODE ); print_calling_line( __LINE__, $CODEREF ); print_calling_line( __LINE__, &{$CODEREF} ); print "\n"; print_calling_line( __LINE__, &CODE ); print_calling_line( __LINE__, $CODEREF ); print_calling_line( __LINE__, &{$CODEREF} ); print "\n"; print_calling_line( __LINE__, ${$SCALARREF} ); print_calling_line( __LINE__, ${$SCALARREF} ); print_calling_line( __LINE__, "space_1", ${$SCALARREF} ); print_calling_line( __LINE__, "space_1", "space_2", ${$SCALARREF} ); print_calling_line( __LINE__, "space_1", "space_2", ${$SCALARREF}, "space_3", "space_4", ); print "\n";