标签: bless

Perl的"祝福"到底是做什么的?

我理解在类的"新"方法中使用Perl中的"bless"关键字:

sub new {
    my $self = bless { };
    return $self;
}    
Run Code Online (Sandbox Code Playgroud)

但究竟什么是"祝福"对哈希引用呢?

perl bless

138
推荐指数
6
解决办法
10万
查看次数

如何在Perl中取消对象?

来自perldoc -f bless:

bless REF,CLASSNAME

这个函数告诉引用的东西REF,它现在
CLASSNAME包中的一个对象.

有没有办法在没有不必要的复制的情况下获得无结构的结构?

oop perl bless

43
推荐指数
4
解决办法
2万
查看次数

该死的,Perl不能祝福我的对象

除了双关语之外,我正在尝试import在我的Perl类中实现一个方法来实例化一个Data对象,该对象本质上是一个美化的hashrefs数组,来自一个正确的hashrefs数组.

以下是我计划如何使用它的示例:

# Pull in the data
my $data = Data->import(
                         [
                           { a => 1, b => 7, c => 3},
                           { a => 7, b => 9, c => 2},
                         ]
                       );

$data->manipulate;  # Use package methods
Run Code Online (Sandbox Code Playgroud)

我的import实现如下:

package Data;

sub initialize {
    my $class = shift;
    my $data = [];
    bless $data, $class;
    return $data;
}

sub import {

    my ( $class, $data ) = @_;

    bless $data, $class;
    return $data; …
Run Code Online (Sandbox Code Playgroud)

perl bless

13
推荐指数
1
解决办法
3389
查看次数

Perl:如何深层复制一个受祝福的对象?

我希望做一个深刻的(在这一点上,浅薄可能就足够了)一个受祝福的物体的副本.

Foo类

package Foo;
our $FOO = new Foo;       # initial run

sub new {
   my $class = shift;
   my $self  = {};
   bless $self, $class;
   return $self;
}
Run Code Online (Sandbox Code Playgroud)

主要计划

use Foo;
my $copy = $Foo::FOO;     # instead of creating a ref, want to deep copy here
$copy->{bar} = 'bar';
Run Code Online (Sandbox Code Playgroud)

bar出现在两者$Foo::FOO$copy.我意识到我可以通过设置为对象来创建对象的副本$copy = { %{$Foo::FOO} },但随后它将不再受到祝福; 另外,这只适用于简单的数据结构(现在不是问题).是这种方式复制然后保佑(例如$copy = bless { %{$Foo::FOO} }, q{Foo};)的唯一方法吗?

我试图避免使用Moose,Clone或其他非核心模块/软件包,因此在回复时请记住这一点. 粗体所以它更突出:)

oop perl deep-copy bless

9
推荐指数
2
解决办法
6992
查看次数

如何结合指南针与保佑?

我正在研究Compass项目,我的最终css输出很大,所以需要得到祝福.

我正在使用Codekit来编译我的SCSS文件,它有较少和sass文件的祝福选项,但不幸的是这个选项似乎不适用于指南针项目(BTW没有解决方法来修复问题https:// github .com/bdkjones/CodeKit/issues/163)

在编译过程之后是否有另一种方法可以自动执行此操作?是否可以使用nodejs观看css文件然后保佑它?

================================================== ==

UPDATE

我不再使用Codekit了,我使用Grunt来构建项目资产,它就像一个魅力.

css bless node.js compass-sass

8
推荐指数
1
解决办法
1933
查看次数

Perl:优雅的方式来检查某些东西是否像包裹一样被祝福?

我想检查a $thing是否是一个受祝福的对象(例如__PACKAGE__).一个想法是:

use Scalar::Util qw(blessed);

defined blessed $thing && blessed $thing eq __PACKAGE__
Run Code Online (Sandbox Code Playgroud)

是否有更好和/或更优雅的方法,以避免检查是否blessed定义了返回值?

另一种方法是(blessed $thing or '') eq __PACKAGE__,但我不确定包装是否可以合法地为空.

另外,基于Perl Monks,UNIVERSAL::isa($thing, __PACKAGE__)是另一种方式,但这种方法允许更多的东西.

perl bless perl5

7
推荐指数
1
解决办法
2348
查看次数

OSX 10.11 El Capitan - 设置引导设备属性不起作用

我正在使用双引导系统,并使用以下AppleScript设置启动卷:

    tell application "Finder" to if not (disk "SoundHD" exists) then do shell script "diskutil mount " & last word of (do shell script "diskutil list | grep 'Apple_HFS SoundHD'")

do shell script "bless -mount \"/Volumes/SoundHD\" -setBoot --nextonly" with administrator privileges

display notification "Next Boot: SoundHD" with title "Neustart"
Run Code Online (Sandbox Code Playgroud)

由于El Capitan脚本将不再工作,我在脚本编辑器中收到以下错误消息:

tell application "Finder"
   exists disk "SoundHD"
            --> true
    end tell
    tell current application
        do shell script "bless -mount \"/Volumes/SoundHD\" -setBoot --nextonly" with administrator privileges
            --> error "Could not set …
Run Code Online (Sandbox Code Playgroud)

macos terminal applescript bless

7
推荐指数
1
解决办法
3万
查看次数

为了祝福或不祝福,这是我的问题!

来自新手用户的第一篇文章.我谷歌的每一个问题似乎都把我带到了这里,我总能得到一个很好的答案,我正在寻找的东西; 所以当我开始思考Perl中祝福的使用时,这是我的第一站.

我刚刚进入Perl的OOP,就在今天阅读帖子,询问保佑的作用.我现在明白它引用一个标量/散列/数组到一个对象,"附加"它,如果你愿意的话.

在我在Perl中看到的大多数类的例子中,它们似乎没有我以前在其他语言中看到的属性......

{ package Person;
    my $property = "This is what I'm talking about :)";

    sub new { ... }
    ...
}
Run Code Online (Sandbox Code Playgroud)

所以,我创建了一个带有属性的愚蠢类,看看会发生什么.我立刻给了物业'NIL'的价值,然后'Not Nil!' 在构造函数中.使用方法LIST,我能够打印属性,正如我所料,它打印出"Not Nil!"

我的问题是,如果属性的工作方式与我预期的相同(在体内声明)那么为什么要使用保佑呢?当你可以简单地创建一个标量/散列/数组作为属性,或者创建你想要作为属性的任何引用时,有什么额外的好处?

我希望我解释了我想要问的内容,非常绿色的Perl :)

oop perl class bless

6
推荐指数
3
解决办法
749
查看次数

Perl中参数输入机制有什么区别?

在读取下载的Perl模块时,我找到了几种定义输入参数的方法,如下所示.它们之间有什么区别?

sub new{
  my $class = shift;
  my $self = {@_};
  bless{$self,  $class};
}

sub count1{
  my ($self, $lab1) = @_;
}

sub new1{
  my ($class, $lab1) = @_;
  my $self = {};
  bless $class, $self;
}

sub setpath{
  my $self = shift;
}
Run Code Online (Sandbox Code Playgroud)

perl input parameter-passing bless

6
推荐指数
1
解决办法
258
查看次数

在 Perl 中,散列和祝福引用之间的根本区别是什么?

我是 Perl 的新手,我想了解/了解更多关于 OO 部分的信息。假设我有一个只有属性的“类”;创建包和祝福散列比直接处理散列有什么好处/优势?

为简单起见,让我们考虑以下示例:

package Person;

sub new {
    my $class = shift;
    my $args = {Name => '', Age => 0, @_};
    
    my $self = { Name => $args->{Name},
                 Age => $args->{Age}, };
    
    bless $self, $class;
}


package main;

my $person1 = Person->new(Name => 'David', Age => 20);
my $person2 = {Name => 'David', Age => 20, Pet => 'Dog'};

print $person1->{Name} . "\n";
print $person2->{Name} . "\n";

Run Code Online (Sandbox Code Playgroud)

我想知道的是,除了 OO 部分之外,除了 1 是有福散列而 2 是散列引用这一事实之外,$person1and之间有什么区别 …

oop perl hash bless

4
推荐指数
1
解决办法
130
查看次数