PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : eine weitere array frage (zuviele leerzeichen)



Chakotay
04-11-2006, 13:11
wenn ich meinen array in die konsole ausgeben lasse
macht er zwischen allen einzelnen einträgen im array immer ein leerzeichen

wie krieg ich das zusätzliche leerzeichen raus ohne gewollte leerzeichen zu verlieren
sodas alle einzelnen einträge direkt hintereinander stehen ?
hatte schon was mit @array[1]... versucht
klappte aber nicht da der array immer unterschiedlich lang ist
da er sich aus verschiedenen eingaben spontan zusammensetzt :-(

testbeispiel:

my @array = ("1","2","3","4","5 b","6","7","8","9");
print("@array");
bisherige ausgabe

1 2 3 4 5 b 6 7 8 9
gewünschte ausgabe

12345 b6789

wie immer für jede hilfe dankbar

sticky bit
04-11-2006, 13:36
print(join('', @array) . "\n");

Chakotay
04-11-2006, 13:57
super klappt :-)

und auch noch so schnell *freu*

danke :-)

reneeb
04-11-2006, 18:47
Warum das join?

Ein einfaches
print @array; tut's auch...

sticky bit
04-11-2006, 19:04
Warum das join?

Ein einfaches
print @array; tut's auch...
Ja, das tuts in der Tat auch. Ich hab auch überlegt ob ich das als Alternative auch noch anbiete. Aber, wenn man dann ne Concatenation wie in meinem Beispiel machen möchte gehts schon wieder nicht, weil dann PERL Skalarkontext für den Array annimmt und man dann wunderbar die Anzahl der Elemente da stehen hat. Natürlich kann man auch zuerst print(@array); machen und dann den Rest also in meinem Bsp. print("\n");. Wenn man lustig ist kann man auch mit foreach durchloopen und immer nur ein Element ausgeben und dann wieder das was man dazu haben möchte ausserhalb der Interation, etc., pp., "there's more than one way to do it!" ;)

Aber am übersichtlichsten und am universal anwendebarsten, wg. Umschiffung o. g. Probleme und weil man schnell doch wieder ein Trennzeichen einfügen kann, find ich halt die Methode mit dem join()...

reneeb
05-11-2006, 11:35
Man braucht nicht immer ein neues print zu machen...


print @array,$variable,"\n";

funktioniert wunderbar. Man beachte die ,. Damit übergibt man print eine Liste! Für alles ein print zu machen ist Perl4-Syntax.

(Sehr) alt:
print "Test\n";
print $variable;
print "\n";
print @array;
print "\n";

Perl5:
print "Test\n",$variable,"\n",@array,"\n"

Da hier keine Konkatenation gemacht wird, wird @array auch nicht im Skalaren Kontext betrachtet, sondern im Listenkontext. Und damit wird genau das erreicht was der OP wollte.

sticky bit
05-11-2006, 12:18
Stimmt, Listen gehen ja auch noch, ganz vergessen. Kommt der Concatenation, von der Schreibweise natürlich sehr nahe...

Aber was mir noch eingefallen ist, alternativ könnte man auch den List-Separator noch ändern, also auf den Leerstring setzen, hat halt dann globale Auswirkungen...


$" = '';
print("@array\n");