Schrift
[thread]9148[/thread]

substr(): Alternative gesucht (Seite 2)



<< |< 1 2 >| >> 16 Einträge, 2 Seiten
Ishka
 2007-07-03 12:04
#78142 #78142
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=opi,02.07.2007, 13:44]Was mir an substr() nicht gefällt ist,
dass der $string jedesmal an substr() übergeben wird,[/quote]
Falls du befürchtest, daß es dadurch langsam werden würde, kann ich dich beruhigen, da der String nicht jedesmal kopiert wird.
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
bloonix
 2007-07-03 14:21
#78143 #78143
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=Ishka,03.07.2007, 10:04]Falls du befürchtest, daß es dadurch langsam werden würde, kann ich dich beruhigen, da der String nicht jedesmal kopiert wird.[/quote]
Genau das hatte ich befürchtet! Kannst du mir kurz erklären, warum der
String nicht jedesmal kopiert wird? Oder kann ich das an irgendeiner
Stelle nachlesen?
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
PerlProfi
 2007-07-03 15:45
#78144 #78144
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Ich würde mal vermuten, dass funktioniert wie der Funktionsprototyp \$.
Damit wird festgelegt, dass die Funktion mit einem Skalar als Parameter aufgerufen werden muss, dieser wird als Referenz an die Funktion übergeben.
Beispiel:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl
use strict;
use warnings 'all';

sub test(\$) {
my $ref = shift;
print " \$ref : $ref\n\$\$ref : $$ref\n";
} # test

my $string = '1234';
test($string);

edit: Das selbe kann man auch mit \@ für Arrays und \% für Hashes erreichen.

MfG\n\n

<!--EDIT|PerlProfi|1183463150-->
Ishka
 2007-07-05 10:09
#78145 #78145
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Der Aufruf einer sub kopiert den Variableninhalt nur dann, wenn man es in der sub explizit macht.
also zum Beispiel:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
sub passby
{
print length($_[0]), "\n";
}

sub copy
{
my $ausgabe=$_[0];
print length($ausgabe), "\n";
}

Die sub passby bearbeitet die Werte nur, aber kopiert nix, darum läuft sie ziemlich schnell. Die sub copy kopiert den Wert allerdings erst in eine eigene Variable, damit dauert die Ausführung schon länger.

Natürlich liegt der wirkliche Grund in den Interna von perl. Bei einem Subroutinenaufruf wird nix kopiert, sondern nur aliase zwischen den Variablen in @_ und den Parameter gebildet. Das sieht man natürlich schön an dem folgenden Program:
Code: (dl )
1
2
3
4
5
6
7
8
9
sub anders
{
$_[0]=5;
}

my $x=3;
anders($x); # setzt x auf 5
print $x;
anders(7); # stürzt ab
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
bloonix
 2007-07-05 13:11
#78146 #78146
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Supi, vielen Dank für deine Erklärung!
[quote=Ishka,05.07.2007, 08:09]Natürlich liegt der wirkliche Grund in den Interna von perl.[/quote]
Gibt es eine Stelle, wo ich mir solche internas durchlesen kann?
In den Perldocs wird sowas bestimmt nicht stehen?!
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
renee
 2007-07-05 13:24
#78147 #78147
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich habe es mir nicht durchgelesen, aber perlguts könnte eine Quelle sein...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2007-07-02 15:44.