Sie können in Perl eine ausreichend ähnliche Syntax erreichen, wenn Sie Autoload- Hacking durchführen.
Erstellen Sie ein kleines Paket für das automatische Laden:
package Autoloader;
use strict;
use warnings;
our $AUTOLOAD;
sub AUTOLOAD {
my $self = shift;
my ($method) = (split(/::/, $AUTOLOAD))[-1];
die "Object does not contain method '$method'" if not ref $self->{$method} eq 'CODE';
goto &{$self->{$method}};
}
1;
Dann enthält Ihr anderes Paket oder Hauptskript eine Unterroutine, die das gesegnete Objekt zurückgibt, das von Autoload verarbeitet wird, wenn seine Methode versucht wird, aufgerufen zu werden.
sub element {
my $elem = shift;
my $sub = {
in => sub {
return if not $_[0];
my %hash; @hash{@_} = ();
return (exists $hash{$elem}) ? 1 : ();
}
};
bless($sub, 'Autoloader');
}
Dies lässt Sie mit der Verwendung wie folgt aussehen:
doTask if element('something')->in(@array);
Wenn Sie den Abschluss und seine Argumente neu organisieren, können Sie die Syntax in die andere Richtung ändern, damit er so aussieht, was dem Autobox-Stil etwas näher kommt:
doTask if search(@array)->contains('something');
Funktion, um das zu tun:
sub search {
my @arr = @_;
my $sub = {
contains => sub {
my $elem = shift or return;
my %hash; @hash{@arr} = ();
return (exists $hash{$elem}) ? 1 : ();
}
};
bless($sub, 'Autoloader');
}