[perl] Reference naar een array buiten scope: gaat dat goed?

Pagina: 1
Acties:

  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 01-01 15:26

PrinsEdje80

Holographic, not grated...

Topicstarter
Ik doe het volgende:

Perl:
1
2
3
4
5
6
7
8
9
10
11
12
my @ref = ();
my @values = ();
my $i = 0;
while (<IN>) {
    chomp;
    my $line = $_;
    my @column = split(' ');
    $ref[$i] = \@column;
    $i++;
}
print @{ $ref[0] };
print @{ $ref[1] };


Wat ik doe hier is ik lees een regel in, split het op de spaties. Dan krijg ik een array met getallen over. Nu wil ik al die getallen gebruiken verderop in het programma. In principe kan je daar een 2D array voor gebruiken. Vanwege een bepaalde functie aanroep, wil ik allemaal losse 1D arrays hebben. Variabele variabele namen zijn uit den boze (en heb ik nog niet uitgevonden in Perl ;)), vandaar dat ik voor de references kies.

Nu is mijn vraag: is dit de juiste manier? Als ik met behulp van print (regel 11 en 12 van de bovenstaande code) controleer waar de reference naar verwijst, dan krijg ik de juiste getallen terug. Maar mijn ervaring met C/C++ leert mij dat geheugen niet altijd direct wordt overschreven en dus somes gewoon 'beschikbaar' blijft en de juiste waarden houdt, terwijl er een mogelijkheid is dat het overschreven wordt.

Met andere woorden: is de gebruikte methode zoals hierboven correct? Kan ik aan het einde van het programma nog steeds zeggen:
Perl:
1
my @otherArr = @{ $ref[0] };

om nog altijd de waarden van de eerste regel van mijn input te verkrijgen?

[ Voor 3% gewijzigd door PrinsEdje80 op 09-11-2005 08:35 ]

Used to be Down Under... Foto gallery


  • JaWi
  • Registratie: Maart 2003
  • Laatst online: 14-01 21:58

JaWi

maak het maar stuk hoor...

Het is correct; ik neem aan dat je eigen testen dat ook wel uitwijzen? Ergens in m'n achterhoofd komt ook deze oplossing "opborrelen" (welke ongeveer hetzelfde is, echter meer Perl-like):

Perl:
1
2
3
4
5
6
my @ref;
while ( chomp( my $line = <IN> ) )
{
  push @ref, [ split ' ', $line ];
}
print @{$ref[0]}, "\n", @{$ref[1]};


(niet getest overigens ;))

Statistics are like bikinis. What they reveal is suggestive, but what they hide is vital.


  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 01-01 15:26

PrinsEdje80

Holographic, not grated...

Topicstarter
JaWi schreef op woensdag 09 november 2005 @ 08:58:
Het is correct; ik neem aan dat je eigen testen dat ook wel uitwijzen? Ergens in m'n achterhoofd komt ook deze oplossing "opborrelen" (welke ongeveer hetzelfde is, echter meer Perl-like):
Idd, mijn testen wijzen dat uit, maar hier werk ik met references (vergelijk C/C++ pointers) en dat is nooit goed bij mij doorgedrongen ;) Maar dan weet ik nu dat ik goed kan doorwerken.

Thnx!

Used to be Down Under... Foto gallery


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

PrinsEdje80 schreef op woensdag 09 november 2005 @ 23:57:
[..] maar hier werk ik met references (vergelijk C/C++ pointers) [..]
offtopic:
C++ kent ook references. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.