Schrift
[thread]3651[/thread]

DBI - fetchrow_arrayref vs. fetchall_arrayref: Unterschiedliches Handling der Refs?

Leser: 2


<< >> 6 Einträge, 1 Seite
snarf
 2006-01-08 17:17
#33905 #33905
User since
2003-08-14
77 Artikel
BenutzerIn
[default_avatar]
Hallo miteinander,

ich stehe wohl gerade auf dem Schlauch ...

ich lese ein:

Code: (dl )
1
2
$refa = $sth->fetchrow-arrayref
$refb = $sth->fetchall-arrayref


Gut, refa ist eine Referenz auf ein Werte-Array, refb ist eine Referenz auf ein Array mit Refs auf (jeweils ein) Werte-Array.

Aber, warum ...

Code: (dl )
1
2
3
4
5
6
7
8
9
$xyz = shift(@$refa);  # erzeugt Fehler: Modification of a read-only value attempted


das hier funktioniert ....

foreach $ref (@$refb)
{
$abc = shift(@$ref)
}


... ja und nun? Bin ich blind ??? Habe ich was überlesen ???
esskar
 2006-01-08 22:07
#33906 #33906
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
nö... ist nunmal so...
brauchst du shift unbedingt?
snarf
 2006-01-08 23:13
#33907 #33907
User since
2003-08-14
77 Artikel
BenutzerIn
[default_avatar]
nein, ich weiß mir natürlich auch so zu behelfen ...

Allerdings wundert es mich nur ein wenig, weil ich ich "den tieferen Sinn" dahinter nicht verstehe (bzw. vorher gar nichts darüber gelesen habe - oder gelesen habe zu meinen).

Wenn "der Sinn" gewesen sein sollte, das TopLevel-Elemente eben nicht geändert werden können, dann hätte ich das noch eingesehen (glaube ich jedenfalls).

Allerdings funktioniert dieses Konstrukt (siehe unten) wie erwartet ... und das führte zu meine Frage ...

Code: (dl )
1
2
3
4
$array_refb = $sth->fetchall_arrayref;

while (my $ref = shift(@$array_refb))
{ $yxz = shift(@$ref) ... + weitere shifts }


Trotzdem danke für dieses "Life's like it is!" :)

snarf
renee
 2006-01-08 23:48
#33908 #33908
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=snarf,08.01.2006, 16:17]Hallo miteinander,

ich stehe wohl gerade auf dem Schlauch ...

ich lese ein:

Code: (dl )
1
2
$refa = $sth->fetchrow-arrayref
$refb = $sth->fetchall-arrayref


Gut, refa ist eine Referenz auf ein Werte-Array, refb ist eine Referenz auf ein Array mit Refs auf (jeweils ein) Werte-Array.

Aber, warum ...

Code: (dl )
1
2
3
4
5
6
7
8
9
$xyz = shift(@$refa);  # erzeugt Fehler: Modification of a read-only value attempted


das hier funktioniert ....

foreach $ref (@$refb)
{
$abc = shift(@$ref)
}


... ja und nun? Bin ich blind ??? Habe ich was überlesen ???[/quote]
die - müssen _ sein...
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/
snarf
 2006-01-09 10:01
#33909 #33909
User since
2003-08-14
77 Artikel
BenutzerIn
[default_avatar]
Hallo Renee,

... um mal mit Atze zu sprechen: " ... nee, schon klar, ne?"

Das waren nur dumme Fipptehler hier im posting :)
esskar
 2006-01-09 11:09
#33910 #33910
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Quote
Note that the same array reference is returned for each fetch, so don't
store the reference and then use it after a later fetch.  Also, the
elements of the array are also reused for each row, so take care if you
want to take a reference to an element.
\n\n

<!--EDIT|esskar|1136797788-->
<< >> 6 Einträge, 1 Seite



View all threads created 2006-01-08 17:17.