Schrift
[thread]6337[/thread]

Eine Referenz auf einen String anlegen, den ich: aber dann verändern kann



<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten
steffenw
 2004-06-16 17:15
#83375 #83375
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
das geht nicht, weil '' eine Konstante ist:
Code: (dl )
1
2
my $result = \'';
$$result .= 'text';

so funktioniert es:
Code: (dl )
1
2
3
4
5
my $result;
{ my $value = '';
 $result = \$value;
}
$$result .= 'text';
 
das funktioniert nicht:
Code: (dl )
1
2
3
my $result = '';
$result = \$result;
$$result .= 'text';

Nun, wie schreibe ich so etwas? Variante 2 ist mir zu lang.\n\n

<!--EDIT|steffenw|1087391861-->
$SIG{USER} = sub {love 'Perl' or die};
renee
 2004-06-16 17:31
#83376 #83376
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Also so bei mir funktioniert:
Code: (dl )
perl -le '$g = "";$sk = \$g; $$sk .= " WELT"; print $$sk;'
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/
Gast Gast
 2004-06-16 17:33
#83377 #83377
Code: (dl )
1
2
3
4
5
my $$result = ' ';
my $text = 'text';

$$result .= $text;
print "Result: $$result";
ptk
 2004-06-16 17:34
#83378 #83378
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Versuch mal stattdessen:
Code: (dl )
1
2
3
my $result0 = '';
$result = \$result0;
$$result .= 'text';

Ansonsten erstellst du anscheinend eine Referenz von $result auf $result.
Gast Gast
 2004-06-16 17:54
#83379 #83379
[quote=ptk,16.06.2004, 15:34]Versuch mal stattdessen:
Code: (dl )
1
2
3
my $result0 = '';
$result = \$result0;
$$result .= 'text';

Ansonsten erstellst du anscheinend eine Referenz von $result auf $result.[/quote]
Das ist doppel-gemoppel ...
Perl legt die Datenypen/Namen zu deklarieten Referenzen automatisch an (im Gegensatz zu sehr vielen anderen Programmiersprachen)
steffenw
 2004-06-16 18:12
#83380 #83380
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
@renee, das ist nich das, was ich wollte, Du hast einen 2. Namen verwendet.
@Dieter, my $$result = ' '; funktioniert nicht. Das Problem ist my und $$...;

Eigentlich sollte $result die Referenz auf den Scalar $result beinhalten und den ursprünglichen Symboltabelleneintrag von $result dabei gleich wieder löschen.

Die Lösung heißt:
Code: (dl )
1
2
my $result;
$$result = '';
Der Gedanke kam mir nur, weil ich letztens auch schon mal sowas ähnliches gemacht habe. Mit temporären Namen habe ich nämlich nicht viel am Hut. Das war:
Code: (dl )
1
2
my $config = new xxx::...::config('parameterliste');
$config = $config->get_config();
und das funktionierte vorzüglich. Da wird man mutig.\n\n

<!--EDIT|steffenw|1087395278-->
$SIG{USER} = sub {love 'Perl' or die};
Gast Gast
 2004-06-16 18:16
#83381 #83381
Code: (dl )
1
2
3
4
5
6
use strict;
my $$result = 'test-';
my $text = 'text';

$$result .= $text;
print "Result: $$result";

läuft einwandfrei (jedenfalls bei mir) :)

$result enthält damit die Referenz auf $result (print $result liefert die Referenzadresse) und mit 'undef $result' ist die Referenz gelöscht.\n\n

<!--EDIT|Dieter|1087396106-->
steffenw
 2004-06-16 18:22
#83382 #83382
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Dieter,16.06.2004, 16:16]läuft einwandfrei (jedenfalls bei mir) :)[/quote]
ActivePerl-5.8.3.809-MSWin32-x86

Can't declare scalar dereference in my
$SIG{USER} = sub {love 'Perl' or die};
Taulmarill
 2004-06-16 18:22
#83383 #83383
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Dieter: wie soll denn so etwas wie my $$result funktionieren???
bei mir kommt da folgende fehlermeldung
Code: (dl )
1
2
Can't declare scalar dereference in my at test.pl line 1, near "$result ="
Execution of test.pl aborted due to compilation errors.


die lösungen von ptk und renee konnte ich nachvollziehen.

ich hab noch mal nen bischen in perldoc perlref gesucht und so ein konstrukt gefunden
Code: (dl )
perl -e'my $sref = *foo{SCALAR}; $$sref .= "text"; print "$sref = $$sref\n";'


aus perldoc perlref: "*foo{THING} returns a reference to the THING slot in *foo (which is the symbol table entry which holds everything known as foo)."
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
ptk
 2004-06-16 18:25
#83384 #83384
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=Dieter,16.06.2004, 16:16]
Code: (dl )
1
2
3
4
5
6
use strict;
my $$result = 'test-';
my $text = 'text';

$$result .= $text;
print "Result: $$result";

läuft einwandfrei (jedenfalls bei mir) :)[/quote]
Manchmal fragt man sich, welchen obskuren Perl-Interpreter du benutzt :-(
<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten



View all threads created 2004-06-16 17:15.