$self->foo(); foo($self); #### package A; sub new { bless {}, shift } sub foo { 'A' } sub bar { my $self = shift; print '$self->foo() = ', $self->foo(), "\n"; print 'foo( $self ) = ', foo( $self ), "\n"; } package B; our @ISA = ('A'); sub foo { 'B' } package main; my $obj_a = A->new(); my $obj_b = B->new(); print "object A call to bar():\n"; $obj_a->bar(); print "object B call to bar():\n"; $obj_b->bar(); __END__ object A call to bar(): $self->foo() = A foo( $self ) = A object B call to bar(): $self->foo() = B foo( $self ) = A #### ($x) = foo(); $x = foo(); #### my @foo_subs = ( 'sub { return ( 4, 5, 6 ) }', 'sub { my @x = ( 4, 5, 6 ); return @x; }', 'sub { wantarray ? ( 7 ) : 8 }', ); foreach my $foo_str ( @foo_subs ) { my $foo = eval $foo_str; my ($x) = $foo->(); my $y = $foo->(); print "foo = $foo_str\n"; print "(\$x) = $x\n"; print " \$y = $y\n"; } __END__ foo = sub { return ( 4, 5, 6 ) } ($x) = 4 $y = 6 foo = sub { my @x = ( 4, 5, 6 ); return @x; } ($x) = 4 $y = 3 foo = sub { wantarray ? ( 7 ) : 8 } ($x) = 7 $y = 8 #### for ( @x ) { foo( $_ ) } map { foo( $_ ) } @x; #### sub foo { my $wa = wantarray; if ( $wa ) { print "array\n" } elsif ( defined $wa ) { print "scalar\n" } else { print "void\n" } } my @x = ( 1, 2 ); print "for(\@x){foo()}:\n"; for ( @x ) { foo( $_ ) } # void print "map{foo()} \@x:\n"; map { foo( $_ ) } @x; # array __END__ for(@x){foo()}: void void map{foo()} @x: array array #### sub baz { return 11 unless shift } print 'baz(5): ', baz(5), "\n"; print 'baz(0): ', baz(0), "\n"; #### baz(5): 5 baz(0): 11 #### my $FOO = 'foo'; sub bar { $_[0] = 'bar' } print $FOO, "\n"; print bar( $FOO ), "\n"; print $FOO, "\n"; #### foo bar bar #### for my $s ( qw( a b c ) ) { $s =~ s/$/\n/ && print $s } #### Modification of a read-only value attempted at interview.pl line