Schrift
[thread]11112[/thread]

verkettungsoperatoren ',' und '.'



<< >> 10 Einträge, 1 Seite
styx-cc
 2008-01-09 01:20
#104516 #104516
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Holla =)

Kann mir jemand den Unterschied (wenn es einen gibt) zwischen den Verkettungsoperatoren "," und "." erklaeren?

Bsp.:
Code (perl): (dl )
perl -e 'print "bla " , "bla"'

zu:
Code (perl): (dl )
perl -e 'print "bla " . "bla"'


Google konnte mir da nicht weiterhelfen.
Pörl.
Ronnie
 2008-01-09 02:33
#104517 #104517
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
, ist kein Verkettungsoperator, sondern trennt die Elemente einer Liste.
Beispiel:
Code: (dl )
1
2
$ perl -we 'my $foo = "foo", "bar"; print $foo'
Useless use of a constant in void context at -e line 1.
Crian
 2008-01-09 10:32
#104519 #104519
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Bei print tritt dann das Phänomen auf, dass die Elemente der Liste, die es bekommt, verkettet werden. Deshalb ist es dort egal. An anderen Orten nicht.
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
pq
 2008-01-09 11:33
#104523 #104523
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Ronnie+2008-01-09 01:33:40--
Beispiel:
Code: (dl )
1
2
$ perl -we 'my $foo = "foo", "bar"; print $foo'
Useless use of a constant in void context at -e line 1.

das ist etwas irreführend.
ich rufe perl auf der kommandozeile automatisch (auch im schlaf) mit -l auf (-w sowieso)
Code: (dl )
1
2
3
$ perl -wle 'my $foo = "foo", "bar"; print $foo'
Useless use of a constant in void context at -e line 1.
foo

so sieht man wenigstens, was ausgegeben wird.
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
styx-cc
 2008-01-09 13:36
#104533 #104533
User since
2006-05-20
533 Artikel
BenutzerIn

user image
merci, haett ich eigentl. auch selber drauf kommen koennen *gruml

edit: ist es dann nicht verwirrend, in laengeren printanweisungen durch komma und nicht durch punkt zu trennen? ich frage, weil ich das desoefteren sehe, und davon ausgehe das die meisten der leute wissen was sie da tun..
Pörl.
renee
 2008-01-09 13:49
#104534 #104534
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
styx-cc+2008-01-09 12:36:43--
merci, haett ich eigentl. auch selber drauf kommen koennen *gruml

edit: ist es dann nicht verwirrend, in laengeren printanweisungen durch komma und nicht durch punkt zu trennen? ich frage, weil ich das desoefteren sehe, und davon ausgehe das die meisten der leute wissen was sie da tun..


Eigentlich ist es nicht verwirrend. Da print ja eine Liste entgegennehmen kann, ist das unproblematisch... Man muss nur den Wissen, dass es Unterschiede zwischen ',' und '.' gibt. Man kann sich z.B. bei perlop schlau machen...
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/
Struppi
 2008-01-09 16:56
#104546 #104546
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Wieso willst du eine Liste die du ausgeben willst verketten?
Nimm das Komma, das ist schneller.
KurtZ
 2008-01-09 17:35
#104548 #104548
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
styx-cc+2008-01-09 12:36:43--
edit: ist es dann nicht verwirrend, in laengeren printanweisungen durch komma und nicht durch punkt zu trennen?


Nein, du musst hier unterscheiden zwischen verschiedenen printargumenten und der verkettung von Strings zu einem Argument. Insbesondere kannst du die Ausgabe verscheidener Argumente mit Variablen wie $, steuern:

perl -wle '
Code: (dl )
1
2
$,="\n";
print "a","b"."c";
'
ergibt
a
bc
TMTOWTDYOG (there's more than one way to dig your own grave)
sid burn
 2008-01-11 01:18
#104601 #104601
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Anstatt $, sollte man lieber ein explizites join() nehmen.
Und wenn man schon Globale Variablen nimmt dann vorher localisieren.

Code: (dl )
local $, = "\n"


----

Ansonsten Arbeiten beide Operatoren anders. Das Komma hat schonmal eine unterschiedliche Funktionsweise im Skalaren sowie im Listenkontext.

Der Punkt Operator schmelzt sozusagen zwei Strings zusammen. Komma im Listenkontext dient dazu Felder voneinander zu trennen (Der Punkt fügt Sachen zusammen).

Und Komma im Skalarenkontext sollte man eh nicht verwenden. ;)
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
renee
 2008-01-11 08:35
#104605 #104605
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Der Punkt erzwingt einen Skalaren Kontext...

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl

use strict;
use warnings;

print "test: ", test(),"\n";

print "test: " . test();

sub test{
    my @array = (1,5);
    return @array;
}


Code: (dl )
1
2
test: 15
test: 2
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/
<< >> 10 Einträge, 1 Seite



View all threads created 2008-01-09 01:20.