在Perl中,没有方法/子的公共或私人访问权限。因此,我需要将一些sub标记为Web调用安全作为一个简单的逻辑,因此在简单检查该子/函数是否标记为public时,将直接Web浏览器调用与该函数同名的操作,否则它将被处理下降。
示例:
sub Register : public {
...... This should be web browser call allowed
}
sub check_login {
... this by default should be private and not allowed to browser.
}
我已经阅读了一些关于不同模块的内容,例如attributes()和moose或moo。
实现这一目标的最佳方法是什么。我只需要检查某些潜艇是否标记为公共,默认是私有。
答案 0 :(得分:2)
一种常见的方法是使用前导下划线命名您想要私有的子例程。
sub foo_public {
}
sub _bar_private {
}
答案 1 :(得分:1)
Sub::Private使用您想要的语法,但我没有使用该模块的第一手经验。在perl中,惯例是私有方法以下划线开头而公共方法则不是。但是,公共/私人访问不会被强制执行。
答案 2 :(得分:1)
Sub::Talisman可能就是你要找的东西。
package MyPackage;
use Sub::Talisman qw( Public Private Shiny Author );
sub foo :Public :Author("Bob") {
...;
}
sub bar :Private :Shiny :Author("Bob") {
...;
}
# Find out if "bar" is private?
my $is_private = grep {
$_ eq 'MyPackage::Private';
} Sub::Talisman->get_attributes(\&bar);
print "Is bar private? ", ($is_private ? 'YES' : 'NO'), "\n";
# Find out who wrote "foo"?
my ($author) = @{
Sub::Talisman->get_attribute_parameters(\&bar, 'MyPackage::Author')
};
print "Who wrote foo? ", $author, "\n";