perl tömb és lista félreértés

van ez a kód és nem értem miért lett az egész 'qq' lista a tömb[0] eleme és miért nem 0,1,2,3
próbáltam split szétszedni de nem ment. A ref() függvény meg semmivel sem tért vissza.

Tud valaki segíteni?
1) hogy lehet a tömböt 'normálisan' (0,1,2,3) feltölteni? - Válasz meg van, qw és nem qq
2) valamint hogyan lehet szétkapni a listát elemeire? Szóval hogy ha van egy string pl egy qq-ból akkor azt hogy lehet elemeire bontani?


#!/usr/bin/env perl
use warnings;
use strict;

my @reversed = ();
my @lists = qq( one two three four);
foreach my $string (@lists)
{ push @reversed, scalar (reverse $string); }

print @reversed,"\n";
print $reversed[0],"\n"

ruof eerht owt eno
ruof eerht owt eno

Hozzászólások

Mert nem qq, hanem qw kellene arra, amit szeretnél.

Szia,
A qq hatására sztringet képzel, szóval, ami a qq-n belül van, egy sztring lesz :) ( http://www.tutorialspoint.com/perl/perl_qq.htm ) , a qw jobb erre a célra ( http://www.tutorialspoint.com/perl/perl_qw.htm ), mint előttem javasolták, de ha nem vagy biztos abban, mit használj, ajánlom, hogy rendes listát képezz.
Pl.:

my @array = ("elem1","elem2","elem3"..."elemN");

Így te is jobban látod, hogy mi is történik és a q betűs mágiák sem zavarnak meg :)
Üdv,
LuiseX

A masodik kerdesedre a valasz: sehogy. Amikor string lett a listabol, onnantol nem tudni, hol voltak az eredeti hatarok. Viszonylag elterjedt, de rossz szokas elobb join-olni es kesobb split-elni, mert az igy kapott eredmeny nem feltetlenul lesz egyezo a kiindulassal.

Mint emlitettem, rossz a koncepcio: mi fogja garantalni, hogy a szeparator sehol sem szerepel az eredeti adatokban, akar tobbszor egymas utan, ami bekavar a split-nek? Miert nem jo az, ha csak ott fuzod ossze az adatokat, ahol tenyleg igy van rajuk szukseg? Sok problemat megsporolhatsz ezzel hosszabb tavon. Hagyjuk meg a favago modszereket az amatoroknek.

Ami ezt garantálja, az egy szabály.

Ilyen, amatőröknek való adathalmazt találunk pl. az /etc/passwd vagy /etc/shadow fájlban.

Itt jönne a közhely, hogyaszongya feladathoz eszközt.

(Ugyanezt az amatőr módszert alkalmazza az awk az indexben többdimenziós tömbök emulálására - adott egy ritkán előforduló szeparátor alapértelmezésként, amit az adatok ismeretében lehet hangolni).

1. nincs ilyen szabaly, legalabbis amennyire a perl interpretert ismerem, es meglehetosen jo baratsagban vagyunk
2. a peldad rossz, mert a passwd es a shadow formatuma is kotott (a mezok szama ismert, elore rogzitett elvalaszto karakter van, ami egyetlen mezoben sem szerepelhet). Ilyet altalanossagban nem tetelezhet fel senki.
3. ne ragaszkodj mar ennyire a rossz beidegzodesekhez, hidd el, en csak segiteni akarok egy tipikus hiba elkeruleseben

Az, hogy a formátum kötött, az a szabály. Konkrétan mindenki erre épít, aki az adott feladatban túllövésnek tartja az olyan hibatűrő struktúrákat, mint pl. az xml. Ha a szkript írja és olvassa is az adathalmazát, máris nem az ördögtől való a skalárból kompozitba és vissza konverzió, nagyképűen: a (de)szerializálás.

Az pedig, hogy egy szkriptet a végtelen formai bizonytalanságra írunk nem tipikus feladat, még ha nem is tiltja semmi.

Akkor még egyszer a közhely: feladathoz az eszközt.

A sehogy erős túlzás: csak akkor igaz (akkor sem feltétlenül), ha a joinoló meggondolatlan volt, és úgy választotta meg az elemek közti határolót, hogy később ne legyen egyértelmű, hogy ki kicsoda.

A nem extrém esetre adott (legegyszerűbb) válasz a split() függvény - gyanítom, hogy erre kíváncsi a kolléga.

perldoc -f split

# !/bin/perl -w
use strict;

my $stringed = qq( one two three four );

print "$stringed\n";
my @tombod = split(/ /, $stringed);
foreach my $stred @tombod {
  print "- $stred -\n";
}

De minta hogy azt írták neked a qw() -kell qq() helyett

----
올드보이
http://molnaristvan.eu/

amiután zárójelbe raktam a tömböt már is működött, addig syntax error-t dobott, de köszönöm. Valóban egy ilyen megoldást kerestem csak nekem valamiért nem ment a split függvény.

my $stringed = qq( one two three four );

print $stringed,"\n";
my @tombod = split(/ /, $stringed);
foreach (@tombod) {
print "- $_ -\n";
}

--
A legértékesebb idő a pillanat amelyben élsz.
https://sites.google.com/site/jupiter2005ster/

Ilyet is lehet:
my @list = (1, 2, 3, 4);