http://www.perlmonks.org?node_id=466652

OP * Perl_ck_require(pTHX_ OP *o) { GV* gv; if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .p +m? */ SVOP *kid = (SVOP*)cUNOPo->op_first; if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_B +ARE)) { char *s; for (s = SvPVX(kid->op_sv); *s; s++) { if (*s == ':' && s[1] == ':') { *s = '/'; Move(s+2, s+1, strlen(s+2)+1, char); --SvCUR(kid->op_sv); } } if (SvREADONLY(kid->op_sv)) { SvREADONLY_off(kid->op_sv); sv_catpvn(kid->op_sv, ".pm", 3); SvREADONLY_on(kid->op_sv); } else sv_catpvn(kid->op_sv, ".pm", 3); } } /* handle override, if any */ gv = gv_fetchpv("require", FALSE, SVt_PVCV); if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) gv = gv_fetchpv("CORE::GLOBAL::require", FALSE, SVt_PVCV); if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) { OP *kid = cUNOPo->op_first; cUNOPo->op_first = 0; op_free(o); return ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, kid, scalar(newUNOP(OP_RV2CV, 0 +, newGVOP(OP_ +GV, 0, gv) +))))); } return ck_fun(o); }

#!/usr/bin/perl use strict; package Obj; sub new { my $class = shift; my $id = shift; return bless { id => $id }, $class; } sub method1 { my $self = shift; print "Object $self->{'id'}: Method 1\n"; } sub method2 { my $self = shift; print "Object $self->{'id'}: Method 2\n"; } package main; my $object1 = new Obj(1); my $object2 = new Obj(2); $object1->method1; $object1->method2; $object2->method1; $object2->method2; foreach my $var ( keys %{*Obj::} ) { no strict 'refs'; my $typeglob = *{"Obj::".$var}; next unless *$typeglob{CODE}; print $typeglob, " - ", ref $typeglob, "\n"; *$typeglob = sub { print "Blah!" }; } use Data::Dumper; print Dumper(%Obj::), "\n"; $object1->method1; $object1->method2; $object2->method1; $object2->method2;
outputs
Object 1: Method 1 Object 1: Method 2 Object 2: Method 1 Object 2: Method 2 *Obj::method2 - *Obj::new - *Obj::method1 - $VAR1 = 'method2'; $VAR2 = *Obj::method2; $VAR3 = 'new'; $VAR4 = *Obj::new; $VAR5 = 'method1'; $VAR6 = *Obj::method1; Object 1: Method 1 Object 1: Method 2 Object 2: Method 1 Object 2: Method 2

#!/usr/bin/perl use HTML::TreeBuilder; my $html = qq{ <html> <body> <table> <tr><td></td></tr> </table> <font></font> <span>Hi THere</span> </body> </html>}; sub remove_empty_tags { my $parser = shift; my $tags = shift; my @children = $parser->content_list(); if ( !@children and grep { uc($_) eq uc($parser->tag()) } @$tags ) +{ $parser->detach(); } &remove_empty_tags( $_, $tags ) foreach @children; } my $parser = HTML::TreeBuilder->new_from_content( $html ); $parser->objectify_text(); remove_empty_tags( $parser, ['FONT','SPAN'] ); print $parser->as_HTML, "\n";

#!/usr/bin/perl use warnings; use strict; use IO::Handle; use IO::Select; use Win32::SelectablePipe qw( winpipe ); local ( *PIPE_READ, *PIPE_WRITE ); Win32::SelectablePipe::winpipe( *PIPE_READ, *PIPE_WRITE ); #pipe( *PIPE_READ, *PIPE_WRITE ); PIPE_READ->autoflush(1); PIPE_WRITE->autoflush(1); print "Pipes open\n"; if ( defined( my $pid = fork() ) ) { if ( $pid ) { my $io = new IO::Select(*PIPE_READ ); while( 1 ) { if ( $io->can_read( 0 ) ) { print "Reading from handle\n"; my $data = <PIPE_READ>; print "Got $data\n"; } else { print "No data, sleeping\n"; sleep 1; } } } else { print PIPE_WRITE "just some junk\n"; sleep 10; print PIPE_WRITE "more junk!\n"; } }

Not saying this is good form, but it gives me
Can't use string ("") as a subroutine ref
#!/usr/bin/perl use warnings; use strict; &second( "Hello" ); sub first { my $sub = shift; $sub->( 3 ); } sub third { } my $hash = { a1 => \&third }; sub second { my $test = shift; first ( sub { $hash->{a1}->( $test ) } ); }

#!/usr/bin/perl use warnings; use strict; package Class; sub new { bless {}, $_[0] }; 1; package Class::SubclassA; sub new { bless {}, $_[0]; }; 1; package Class::SubclassB; sub new { return bless {}, $_[0]; }; 1; package ClassFactory; my %creation_hash = ( SubclassA => sub { Class::SubclassA->new() }, SubclassB => sub { Class::SubclassB->new() } ); sub create { shift; print $creation_hash{$_[0]}, "\n"; return $creation_hash{$_[0]}->(); } 1; package main; my $a = ClassFactory->create( "SubclassA" ); my $b = ClassFactory->create( "SubclassB" ); print $a, "\n"; print $b, "\n";