Perl将sub标记为Public或Private

时间:2014-02-14 14:37:18

标签: perl attributes

在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。

实现这一目标的最佳方法是什么。我只需要检查某些潜艇是否标记为公共,默认是私有。

3 个答案:

答案 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";