📄 autoloader.t
字号:
#!./perlBEGIN { chdir 't' if -d 't'; $dir = "auto-$$"; @INC = $dir; push @INC, '../lib';}print "1..11\n";# First we must set up some autoloader filesmkdir $dir, 0755 or die "Can't mkdir $dir: $!";mkdir "$dir/auto", 0755 or die "Can't mkdir: $!";mkdir "$dir/auto/Foo", 0755 or die "Can't mkdir: $!";open(FOO, ">$dir/auto/Foo/foo.al") or die;print FOO <<'EOT';package Foo;sub foo { shift; shift || "foo" }1;EOTclose(FOO);open(BAR, ">$dir/auto/Foo/bar.al") or die;print BAR <<'EOT';package Foo;sub bar { shift; shift || "bar" }1;EOTclose(BAR);open(BAZ, ">$dir/auto/Foo/bazmarkhian.al") or die;print BAZ <<'EOT';package Foo;sub bazmarkhianish { shift; shift || "baz" }1;EOTclose(BAZ);# Let's define the packagepackage Foo;require AutoLoader;@ISA=qw(AutoLoader);sub new { bless {}, shift };package main;$foo = new Foo;print "not " unless $foo->foo eq 'foo'; # autoloaded first timeprint "ok 1\n";print "not " unless $foo->foo eq 'foo'; # regular callprint "ok 2\n";# Try an undefined methodeval { $foo->will_fail;};print "not " unless $@ =~ /^Can't locate/;print "ok 3\n";# Used to be trouble with thiseval { my $foo = new Foo; die "oops";};print "not " unless $@ =~ /oops/;print "ok 4\n";# Pass regular expression variable to autoloaded function. This used# to go wrong because AutoLoader used regular expressions to generate# autoloaded filename."foo" =~ /(\w+)/;print "not " unless $1 eq 'foo';print "ok 5\n";print "not " unless $foo->bar($1) eq 'foo';print "ok 6\n";print "not " unless $foo->bar($1) eq 'foo';print "ok 7\n";print "not " unless $foo->bazmarkhianish($1) eq 'foo';print "ok 8\n";print "not " unless $foo->bazmarkhianish($1) eq 'foo';print "ok 9\n";# test recursive autoloadsopen(F, ">$dir/auto/Foo/a.al") or die;print F <<'EOT';package Foo;BEGIN { b() }sub a { print "ok 11\n"; }1;EOTclose(F);open(F, ">$dir/auto/Foo/b.al") or die;print F <<'EOT';package Foo;sub b { print "ok 10\n"; }1;EOTclose(F);Foo::a();# cleanupEND {return unless $dir && -d $dir;unlink "$dir/auto/Foo/foo.al";unlink "$dir/auto/Foo/bar.al";unlink "$dir/auto/Foo/bazmarkhian.al";unlink "$dir/auto/Foo/a.al";unlink "$dir/auto/Foo/b.al";rmdir "$dir/auto/Foo";rmdir "$dir/auto";rmdir "$dir";}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -