#!/usr/bin/perl
# Idiom #271 Test for type extension
# https://p...content-available-to-author-only...s.org/idiom/271
use v5.10;
@isa = ('Foo');
sub new { bless {}, $_[0] } }
my $f = Foo->new;
tst($f);
my $e = FooExt->new;
tst($e);
my $o = Other->new;
tst($o);
sub tst {
my ($x) = @_;
if ( $x->isa('Foo') ) {
say "Same type";
}
elsif ( $x->isa('FooExt') ) {
my $issubclass = grep { $_ eq 'Foo' } @FooExt::isa; say $issubclass ? "Extends type" : "Same type";
}
else {
say "Not related"
}
}
IyEvdXNyL2Jpbi9wZXJsCiMgSWRpb20gIzI3MSBUZXN0IGZvciB0eXBlIGV4dGVuc2lvbgojIGh0dHBzOi8vcC4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4ucy5vcmcvaWRpb20vMjcxCgp1c2UgdjUuMTA7CgpwYWNrYWdlIE90aGVyIHsgc3ViIG5ldyB7IGJsZXNzIHt9LCAkX1swXSB9IH0KCnBhY2thZ2UgRm9vIHsgc3ViIG5ldyB7IGJsZXNzIHt9LCAkX1swXSB9IH0KCnBhY2thZ2UgRm9vRXh0IHsKICAgIEBpc2EgPSAoJ0ZvbycpOwogICAgc3ViIG5ldyB7IGJsZXNzIHt9LCAkX1swXSB9Cn0KCm15ICRmID0gRm9vLT5uZXc7CnRzdCgkZik7CgpteSAkZSA9IEZvb0V4dC0+bmV3Owp0c3QoJGUpOwoKbXkgJG8gPSBPdGhlci0+bmV3Owp0c3QoJG8pOwoKc3ViIHRzdCB7CiAgICBteSAoJHgpID0gQF87CgogICAgaWYgKCAkeC0+aXNhKCdGb28nKSApIHsKICAgICAgICBzYXkgIlNhbWUgdHlwZSI7CiAgICB9CiAgICBlbHNpZiAoICR4LT5pc2EoJ0Zvb0V4dCcpICkgewogICAgICAgIG15ICRpc3N1YmNsYXNzID0gZ3JlcCB7ICRfIGVxICdGb28nIH0gQEZvb0V4dDo6aXNhOwogICAgICAgIHNheSAkaXNzdWJjbGFzcyA/ICJFeHRlbmRzIHR5cGUiIDogIlNhbWUgdHlwZSI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBzYXkgIk5vdCByZWxhdGVkIgogICAgfQp9