Warum funktioniert das ?
xNeTworKx
- perl
0 Daniel Thoma0 Cheatah0 Rolf
Hallo,
ich bin zu der Problematik gekommen, daß wenn ich Skalare Werte hab, den Inhalt zum Teil ersetzen will.
#!C:/Perl/bin/Perl.exe -w
use CGI::Carp qw(fatalsToBrowser);
print "Content-type:text/html\n\n";
$daten = "Das ist ein Test, um zu testen ob man Skalare ersetzen kann.\n";
$daten =~ s/testen/blablabla/, $daten;
print $daten;
Warum funktioniert das so ? Weil ein Wert -> $ ist doch nur EINE Variable und keine Liste.
Hallo xNeTworKx
$daten =~ s/testen/blablabla/, $daten;
nach perldoc perlop ist das gleichbedeutend mit:
($daten =~ s/testen/blablabla/), $daten;
Das ist folglich also eine Liste, diese wird aber nicht $daten zugewiesen. Vielmehr wird sie gar keiner Variablen zugewiesen.
Damit hat die Zeile den selben Effekt, als ob man nur $daten =~s/testen/blablabla/ schreiben würde - testen wird durch blablabla ersetzt.
Wenn man use warnings verwendet, gibt perl auch folgende Meldung aus:
Useless use of private variable in void context at test.pl line ...
Grüße
Daniel
Hi,
Warum funktioniert das so ?
mach's mal ohne CGI:
#!/usr/bin/perl -w
use strict;
my $daten = "Das ist ein Test, um zu testen ob man Skalare ersetzen kann.\n";
$daten =~ s/testen/blablabla/, $daten;
print $daten;
=>
Useless use of private variable in void context at D:\Web.de\online\cgi-bin\test\test15.pl line 5.
Das ist ein Test, um zu blablabla ob man Skalare ersetzen kann.
Jetzt klarer? :-)
Cheatah
Hallo,
kein Unterschied bei mir ?????
#!C:/Perl/bin/Perl.exe -w
use strict;
print "Content-type:text/html\n\n";
my $daten = "Das ist ein Test, um zu testen ob man Skalare splitten kann.\n";
$daten =~ s/Skalare/blablabla/, $daten;
print $daten;
hi!
kein Unterschied bei mir ?????
Das "use strict;" bewirkt in dem Fall nichts, nur das "-w"-Flag für
die Warnungen. Das zeigt eben an "Useless use of private variable in
void context at C:\test.pl line 7.", wie dir jetzt schon genug Leute
gesagt haben. Was ist jetzt überhaupt dein Problem?
Und bitte unter </faq/#Q-20> nachlesen, warum man den Thread-Titel
nur bei Bedarf ändern soll!
bye, Frank!
Hallo,
$daten =~ s/testen/blablabla/, $daten;
Keine Sorge, $daten ist und bleibt auch nach dieser Zeile ein scalar. Du könntest genausogut schreiben
$daten =~ s/testen/blablabla/, $daten, 1, 2, 3;
und PERL meckert nicht.
Viele Grüße, Rolf
Hoi,
Keine Sorge, $daten ist und bleibt auch nach dieser Zeile ein
scalar. Du könntest genausogut schreiben
$daten =~ s/testen/blablabla/, $daten, 1, 2, 3;
und PERL meckert nicht.
Das wage ich zu bezweifeln:
H:\Perl\bin>perl -we "$daten = 'xyz'; $daten =~ s/x/y/g, $daten, 1, 2, 3;"
Useless use of a variable in void context at -e line 1.
Useless use of a constant in void context at -e line 1.
Useless use of a constant in void context at -e line 1.
H:\Perl\bin>perl -v
This is perl, v5.6.0 built for MSWin32-x86-multi-thread
(with 1 registered patch, see perl -V for more detail)
Copyright 1987-2000, Larry Wall
Binary build 620 provided by ActiveState Tool Corp. http://www.ActiveState.com
Built 18:31:05 Oct 31 2000
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5.0 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using man perl' or
perldoc perl'. If you have access to the
Internet, point your browser at http://www.perl.com/, the Perl Home Page.
H:\Perl\bin>
Gruesse,
CK
hi!
Keine Sorge, $daten ist und bleibt auch nach dieser Zeile ein
scalar. Du könntest genausogut schreiben
$daten =~ s/testen/blablabla/, $daten, 1, 2, 3;
und PERL meckert nicht.
Das wage ich zu bezweifeln:
Naja, das Meckern ist immerhin nicht das Standard-Verhalten von Perl.
Erst, wenn man das 'warnings'-Flag setzt -- mit -w oder use warnings;
-- meckert er über diese Stellen. Fehlerhaft ist der Code dadurch noch
immer nicht, evtl. ist er an manchen Stellen nichtmal ganz sinnlos... ;)
bye, Frank!