$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