/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
(@a, @a = ()) giver "Useless use of privat~
Fra : T. Sandbaek


Dato : 19-05-03 12:31

Hej

Jeg har lidt svært ved at forstå denne fejlmeddelse

jeg har følgende kode:
#!perl -w
use strict;

use Data::Dumper;


my @MenuFile;


push @MenuFile, "hej";
push @MenuFile, "hej";
push @MenuFile, "hej";
push @MenuFile, "hej";
push @MenuFile, "hej";
push @MenuFile, "hej";
push @MenuFile, "hej";
push @MenuFile, "hej";
push @MenuFile, "hej";



print STDERR Dumper(\@MenuFile);
(@MenuFile, @MenuFile = ());
print STDERR Dumper(\@MenuFile);



men jeg får en warning når jeg køre den:
"Useless use of private array in void context at t.pl line 23"

hvorfor? og hvad betyder det?
Jeg fandt metoden i "Programming Perl 3rd." i afsnittet om splice() så det
undre mig at det ikke bare virker uden warnings!

mvh
Torben



 
 
Peter Makholm (19-05-2003)
Kommentar
Fra : Peter Makholm


Dato : 19-05-03 12:47

"T. Sandbaek" <tpnno-spam@nospam.please.control-systems.com> writes:

> men jeg får en warning når jeg køre den:
> "Useless use of private array in void context at t.pl line 23"

Så slår man op i perldiag.

Basalt set giver det ikke mening at lave en liste uden at gøre noget
ved den.

--
Peter Makholm | If you can't do any damage as root, are you still
peter@makholm.net | really root?
http://hacking.dk | -- Derek Gladding about SELinux

Adam Sjøgren (19-05-2003)
Kommentar
Fra : Adam Sjøgren


Dato : 19-05-03 12:55

On Mon, 19 May 2003 13:30:52 +0200, T Sandbaek wrote:

> (@MenuFile, @MenuFile = ());

[...]

> men jeg får en warning når jeg køre den:
> "Useless use of private array in void context at t.pl line 23"

> hvorfor? og hvad betyder det?

Hvad vil du med linien; hvad er det du prøver på?

Jeg synes det ser ud som om linien resulterer i et unavngivet array,
der indeholder @MenuFile, og som derefter bliver smidt væk - det er
det, den brokker sig over - desuden er der den bivirkning at array'en
@MenuFile bliver tømt.

Hvis du bruger udtrykket vil noget, så brokker den sig ikke over at du
har et unavngivet array du ikke bruger til noget:

my @a=(@MenuFile, @MenuFile=());

giver f.ex. ingen fejlmeddelelse.

Men det en lidt mærkelig måde at skrive:

my @a=@MenuFile;
@MenuFile=();

på...

> Jeg fandt metoden i "Programming Perl 3rd." i afsnittet om splice()
> så det undre mig at det ikke bare virker uden warnings!

Står der præcis det samme i eksemplet?


Mvh.

--
"Från och med nu, så är 'så snart Adam Sjøgren
som möjligt' 53 timmar!" asjo@koldfront.dk

Kim Hansen (19-05-2003)
Kommentar
Fra : Kim Hansen


Dato : 19-05-03 13:18

"T. Sandbaek" <tpnno-spam@nospam.please.control-systems.com> writes:
>
> print STDERR Dumper(\@MenuFile);
> (@MenuFile, @MenuFile = ());
> print STDERR Dumper(\@MenuFile);
>
> men jeg får en warning når jeg køre den:
> "Useless use of private array in void context at t.pl line 23"

Ideen med eksemplet er at sammenligne den linje du har skrevet med
splice( @MenuFile );

splice() har to egenskaber, den sletter indholdet i @MenuFile og den
returnerer dette indhold. Når du skriver det eksplicit ud som du har
gjort i eksemplet, uden af samle returværdien op, kan oversætteren
genkende det som være spild af tid, derfor advarer den imod det.

--
Kim Hansen | |\ _,,,---,,_ | Det er ikke
Dalslandsgade 8, A708 | /,`.-´` -. ;:-. | Jeopardy.
2300 København S | |,4- ) )-,_. ,\ ( `'-' | Svar _efter_
Tlf: 32 88 60 86 | '---''(_/--' `-'\_) | spørgsmålet.

T. Sandbaek (19-05-2003)
Kommentar
Fra : T. Sandbaek


Dato : 19-05-03 13:39

Hej Kim, Adam og Peter

Tak for svarene. Jeg fik ikke skrevet at det var fordi at jeg ønskede at
slette arrayet for at hælde noget nyt ind det. Ud fra jeres svar kan jeg se
at det var selvfølgeligt indlysende bare at skrive @a=();
Tak for hjælpen.


P.S.
Jeg havde forsøgt at kikke i dokumentationen, men kunne ikke finde noget på
fejlmeddelsen, og var ikke sikker på hvad jeg skulle slå op under for at
finde dok på (@a,@a =())så jeg tænkte at I sikkert kunne hjælpe.

P.P.S.
Indholdsfortegnelser er en god ting for nybegynder, men det er lidt
misvisende at der ikke er en henvisning til @a=(); under "deteting- Array "


Med venlig hilsen
Torben

"Kim Hansen" <k-spam2003@oek.dk> wrote in message
news:87el2vcepo.fsf@matrix.oek.dk...
> "T. Sandbaek" <tpnno-spam@nospam.please.control-systems.com> writes:
> >
> > print STDERR Dumper(\@MenuFile);
> > (@MenuFile, @MenuFile = ());
> > print STDERR Dumper(\@MenuFile);
> >
> > men jeg får en warning når jeg køre den:
> > "Useless use of private array in void context at t.pl line 23"
>
> Ideen med eksemplet er at sammenligne den linje du har skrevet med
> splice( @MenuFile );
>
> splice() har to egenskaber, den sletter indholdet i @MenuFile og den
> returnerer dette indhold. Når du skriver det eksplicit ud som du har
> gjort i eksemplet, uden af samle returværdien op, kan oversætteren
> genkende det som være spild af tid, derfor advarer den imod det.
>
> --
> Kim Hansen | |\ _,,,---,,_ | Det er ikke
> Dalslandsgade 8, A708 | /,`.-´` -. ;:-. | Jeopardy.
> 2300 København S | |,4- ) )-,_. ,\ ( `'-' | Svar _efter_
> Tlf: 32 88 60 86 | '---''(_/--' `-'\_) | spørgsmålet.



Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste