声明全局 perl 子例程或全局别名
declaring global perl subroutines or global aliases
我的问题是,希望很简单。
在 Perl 中,如何创建一个全局范围内的子程序供其后的所有对象访问?
sub throw
{
die(shift);
}
似乎在全球范围内工作,但之后的包无法访问。我想避免在我的应用程序堆栈中的每个对象中进行某种声明。
附带解决方案:如何为像 die 这样的全局关键字创建别名?
请注意:我真的不在乎这样做是否被认为是最佳实践。尽管它们在 Perl 中执行相同的功能,但 die 不是 throw,throw 也不是 die。以下语法不遵循我试图遵循的 OOP 原则:
die new Exception($message);
但是逻辑上相似,为了抛出异常,我更喜欢这样的语法:
throw new Exception($message);
非常感谢 Whosebug 社区!
您可以将 throw
添加到 UNIVERSAL
包中(这不是一个好的做法)。
请注意,您的 throw
会忽略该消息并仅显示 class 姓名。
#!/usr/bin/perl
use warnings;
use strict;
{ package UNIVERSAL;
sub throw { die shift }
}
{ package MyClass;
sub new { bless {}, shift }
}
my $c = 'MyClass'->new;
$c->throw('Ouch!');
像这样的范例怎么样,它可以同时解决您的两个问题?
package Exception;
sub throw {
my $message = shift;
die Exception->new($message);
}
sub new {
# whatever
}
...
然后在任何包中你都可以这样使用它:
package SomeClass;
sub do_something {
...
if ($error) {
Exception->throw($message);
}
}
我的问题是,希望很简单。
在 Perl 中,如何创建一个全局范围内的子程序供其后的所有对象访问?
sub throw
{
die(shift);
}
似乎在全球范围内工作,但之后的包无法访问。我想避免在我的应用程序堆栈中的每个对象中进行某种声明。
附带解决方案:如何为像 die 这样的全局关键字创建别名?
请注意:我真的不在乎这样做是否被认为是最佳实践。尽管它们在 Perl 中执行相同的功能,但 die 不是 throw,throw 也不是 die。以下语法不遵循我试图遵循的 OOP 原则:
die new Exception($message);
但是逻辑上相似,为了抛出异常,我更喜欢这样的语法:
throw new Exception($message);
非常感谢 Whosebug 社区!
您可以将 throw
添加到 UNIVERSAL
包中(这不是一个好的做法)。
请注意,您的 throw
会忽略该消息并仅显示 class 姓名。
#!/usr/bin/perl
use warnings;
use strict;
{ package UNIVERSAL;
sub throw { die shift }
}
{ package MyClass;
sub new { bless {}, shift }
}
my $c = 'MyClass'->new;
$c->throw('Ouch!');
像这样的范例怎么样,它可以同时解决您的两个问题?
package Exception;
sub throw {
my $message = shift;
die Exception->new($message);
}
sub new {
# whatever
}
...
然后在任何包中你都可以这样使用它:
package SomeClass;
sub do_something {
...
if ($error) {
Exception->throw($message);
}
}