Schrift
[thread]6308[/thread]

Subroutine auseinander pflücken: Was macht diese Sub?



<< >> 5 Einträge, 1 Seite
pktm
 2004-06-03 21:33
#82966 #82966
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
sub _get_filter {
my $self = shift;
my @ret;
if ($self->{autoDeleteHeader}) {
push @ret, sub {
my $tmpl = shift;
my $header;
###if ($$tmpl =~s{^.+?<body([^>'"]*|".*?"|'.*?')+>}{}msi) {
if ($$tmpl =~s{(^.+?<body(?:[^>'"]*|".*?"|'.*?')+>)}{}msi) {
###$self->{header} = $&;
$self->{header} = $1;
&tokenizer_header($self);
} else {
# header doesn't exist
undef $self->{header};
undef $self->{tokens};
}
$$tmpl =~ s{</body>.+}{}msi;
};
}
return \@ret;
}


gefunden in einem bei mir nicht wirklich funktionierenden Modul namens HTML::Extension::HEAD_BODY

Und jetzt würde ich gerne wissen was das macht.
Ich kann mir da irgendwie keinen Reim drauf bilden.
Wo kommen diese Variablen her?
Wie funktioniert dieses push @ret, sub {} ?
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
[E|B]
 2004-06-03 22:26
#82967 #82967
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Quote
Wie funktioniert dieses push @ret, sub {} ?


Als Argument wird eine anonyme Subroutine übergeben. Die Sub baut die Parameter zusammen, die sie dann mit return zurückliefert und die dann in dem Array "@ret" gespeichert werden. Natürlich könntest du dafür auch eine extra Funktion schreiben, ist aber nicht so perlisch wie die Lösung hier.
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
pktm
 2004-06-03 22:39
#82968 #82968
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Aber dieser sub wird doch der Wert für $tmpl = shift; übergeben.
Wie übergibt man denn da Werte?
http://www.intergastro-service.de (mein erstes CMS :) )
pq
 2004-06-03 23:05
#82969 #82969
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=pktm,03.06.2004, 20:39]Aber dieser sub wird doch der Wert für $tmpl = shift; übergeben.
Wie übergibt man denn da Werte?[/quote]
hmm, du scheinst mit anonymen subroutinen nicht vertraut zu sein.
Code: (dl )
1
2
3
4
5
6
7
tina@lux:~> perl -wle'
my $sub = sub {
 print "arguments: (@_)";
};
$sub->(1, 2, 3);
'
arguments: (1 2 3)

im moment der sub-erstellung wird der code noch nicht ausgeführt.
ist eigentlich alles genauso wie bei nemed-subs, also
sub name { tu was... }
my $name = sub { tu was... };


perldoc perlsub
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Crian
 2004-06-04 18:50
#82970 #82970
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Aufgerufen werden die Funktionen wohl erst von dem Programm, das \@ret entgegennimmt. Die entsprechende Codestelle sieht man in dem geposteten Ausschnitt nicht, dort werden die anonymen subs nur definiert.\n\n

<!--EDIT|Crian|1086360621-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 5 Einträge, 1 Seite



View all threads created 2004-06-03 21:33.