晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /usr/share/perl5/Module/ |
Upload File : |
package Module::Loaded;
use strict;
use Carp qw[carp];
BEGIN { use base 'Exporter';
use vars qw[@EXPORT $VERSION];
$VERSION = '0.08';
@EXPORT = qw[mark_as_loaded mark_as_unloaded is_loaded];
}
=head1 NAME
Module::Loaded - mark modules as loaded or unloaded
=head1 SYNOPSIS
use Module::Loaded;
$bool = mark_as_loaded('Foo'); # Foo.pm is now marked as loaded
$loc = is_loaded('Foo'); # location of Foo.pm set to the
# loaders location
eval "require 'Foo'"; # is now a no-op
$bool = mark_as_unloaded('Foo'); # Foo.pm no longer marked as loaded
eval "require 'Foo'"; # Will try to find Foo.pm in @INC
=head1 DESCRIPTION
When testing applications, often you find yourself needing to provide
functionality in your test environment that would usually be provided
by external modules. Rather than munging the C<%INC> by hand to mark
these external modules as loaded, so they are not attempted to be loaded
by perl, this module offers you a very simple way to mark modules as
loaded and/or unloaded.
=head1 FUNCTIONS
=head2 $bool = mark_as_loaded( PACKAGE );
Marks the package as loaded to perl. C<PACKAGE> can be a bareword or
string.
If the module is already loaded, C<mark_as_loaded> will carp about
this and tell you from where the C<PACKAGE> has been loaded already.
=cut
sub mark_as_loaded (*) {
my $pm = shift;
my $file = __PACKAGE__->_pm_to_file( $pm ) or return;
my $who = [caller]->[1];
my $where = is_loaded( $pm );
if ( defined $where ) {
carp "'$pm' already marked as loaded ('$where')";
} else {
$INC{$file} = $who;
}
return 1;
}
=head2 $bool = mark_as_unloaded( PACKAGE );
Marks the package as unloaded to perl, which is the exact opposite
of C<mark_as_loaded>. C<PACKAGE> can be a bareword or string.
If the module is already unloaded, C<mark_as_unloaded> will carp about
this and tell you the C<PACKAGE> has been unloaded already.
=cut
sub mark_as_unloaded (*) {
my $pm = shift;
my $file = __PACKAGE__->_pm_to_file( $pm ) or return;
unless( defined is_loaded( $pm ) ) {
carp "'$pm' already marked as unloaded";
} else {
delete $INC{ $file };
}
return 1;
}
=head2 $loc = is_loaded( PACKAGE );
C<is_loaded> tells you if C<PACKAGE> has been marked as loaded yet.
C<PACKAGE> can be a bareword or string.
It returns falls if C<PACKAGE> has not been loaded yet and the location
from where it is said to be loaded on success.
=cut
sub is_loaded (*) {
my $pm = shift;
my $file = __PACKAGE__->_pm_to_file( $pm ) or return;
return $INC{$file} if exists $INC{$file};
return;
}
sub _pm_to_file {
my $pkg = shift;
my $pm = shift or return;
my $file = join '/', split '::', $pm;
$file .= '.pm';
return $file;
}
=head1 BUG REPORTS
Please report bugs or other issues to E<lt>bug-module-loaded@rt.cpan.org<gt>.
=head1 AUTHOR
This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
=head1 COPYRIGHT
This library is free software; you may redistribute and/or modify it
under the same terms as Perl itself.
=cut
# Local variables:
# c-indentation-style: bsd
# c-basic-offset: 4
# indent-tabs-mode: nil
# End:
# vim: expandtab shiftwidth=4:
1;