[ PERL ] Global symbol foo requires explicit pa

Pagina: 1
Acties:

  • Klaus_1250
  • Registratie: December 2000
  • Laatst online: 09-09 11:09
Bij het volgende deel van een script krijg ik continu de foutmelding Global symbol foo requires explicit package name.

use Time::Local;
my $time = timegm($sec, $min, $hours, $mday, $mon, $year);

Het is niet heel het script, maar in de twee regels hierboven zit het probleem. Ik probeer de tijd naar Epoch seconds om te zetten om er wat mee te rekenen.
Hoewel ik het bij benadering het probleem wel wel snap, weet ik niet hoe ik het moet oplossen. Bij alles wat ik probeer krijg ik weer een andere foutmelding.

By the weg, weet iemand hoe ik #!/bin/perl5.005_03 -T kan aanzetten zonder dat ik de foutmelding krijg Too late for "-T" option ???

Verwijderd

hier staan de docs, maar in de syntax daar staat jouw code letterlijk:
code:
1
$time = timegm($sec,$min,$hours,$mday,$mon,$year);

  • Ees
  • Registratie: Juli 2001
  • Laatst online: 29-07 15:00

Ees

Zijn je variabelen ($sec, $min, etc) wel geinitialiseerd? Ergens hoger in je script moet je dus zoiets hebben als:

my ($sec, $min, bla, bla) = whatever

Kijk eens in "man perldiag", ook voor die "Too late for -T option" foutmelding.

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 04-09 13:39
my $sec;
my $min;
my $bla;
my $bla;

kan natuurlijk ook.

zeroxcool.net - curity.eu


  • Klaus_1250
  • Registratie: December 2000
  • Laatst online: 09-09 11:09
die variabelen heb ik geprobeerd te declareren, maar dan geeft ie ook een foutmelding :-( Dat is eigenlijk het probleem, omdat ik de module Time::Local gebruik, moet ik ik de variabelen die ik eruit gebruik eerst declaren (de module impliceert namelijk use strict 'vars' voor het script). Alleen als ik die dus eerst declareer, dan krijg ik een hele berg foutmeldingen zoals:

Use of uninitialized value at /www/lib/perl5/5.00503/Time/Local.pm line 56 (#1)

(W) An undefined value was used as if it were already defined. It was
interpreted as a "" or a 0, but maybe it was a mistake. To suppress this
warning assign an initial value to your variables.

Use of uninitialized value at /www/lib/perl5/5.00503/Time/Local.pm line 100 (#1)

Dat van die -T option staat inderdaad wel gedocumenteerd, maar alleen als je een script met Perl vanaf de command-line probeert te runnen. Ik moet het op een webserver doen, die ikzelf niet onder controle heb. En dat staat juist weer nergens...

  • Ees
  • Registratie: Juli 2001
  • Laatst online: 29-07 15:00

Ees

Maar wat staat er dan in $sec, $min, enzovoorts op het moment dat je timegm aanroept? Zijn ze wel geinitialiseerd? :? Want dat is dus wel de bedoeling...

Edit voor die taint-checking: dan staat die -T dus gewoon in de shebang regel, dus de server moet die gewoon zelf oppakken.

  • Klaus_1250
  • Registratie: December 2000
  • Laatst online: 09-09 11:09
Niks, ik wel gewoon de huidige tijd in Epoch-seconds hebben. Ik heb ze geinitialiseerd met my ($sec, ...); Ik had een scriptje rechtstreeks vanuit het Perl Cookbook gehaald, en dat werkt dus niet. Ik kan alleen nergens vinden (boeken, inet, perldoc, etc) hoe ik het moet oplossen...

shebang regel :? Sorry, ben nog een beetje newby in Perl...

Verwijderd

Ten eerste, voor de tijd in sec sinds de epoch heb je helemaal geen module nodig: gebruik gewoon de functie 'time()'.

Ten tweede, de optie '-T' op de shebang line werkt niet vanaf de command-line. Dan moet je het echt als command-line switch meegeven: 'perl -w -T script.pl'.

Overigens zijn al deze wijsheden ook gewoon in de perlfaq en perldocs te vinden hoor.

  • Klaus_1250
  • Registratie: December 2000
  • Laatst online: 09-09 11:09
1: Je hebt gelijk, dom dom dom van mij, maar daar ben ik een newbie voor :) Maar in het geval dat ik het wel via een module zou willen doen, hoe moet dat dan? Ik heb nu:

use Time::Local;

local ($Time::Local::sec,$Time::Local::min,$Time::Local::hours,$Time::Local::mday,$Time::Local::mon,$Time::Local::year);
my $time = timegm($Time::Local::sec, $Time::Local::min, $Time::Local::hours, $Time::Local::mday, $Time::Local::mon, $Time::Local::year);

wat de foutmelding geeft:

Use of uninitialized value at /www/lib/perl5/5.00503/Time/Local.pm line 56.
Use of uninitialized value at /www/lib/perl5/5.00503/Time/Local.pm line 56.
Use of uninitialized value at /www/lib/perl5/5.00503/Time/Local.pm line 100.
Use of uninitialized value at /www/lib/perl5/5.00503/Time/Local.pm line 103.
Use of uninitialized value at /www/lib/perl5/5.00503/Time/Local.pm line 103.
Use of uninitialized value at /www/lib/perl5/5.00503/Time/Local.pm line 104.
Use of uninitialized value at /www/lib/perl5/5.00503/Time/Local.pm line 104.
Use of uninitialized value at /www/lib/perl5/5.00503/Time/Local.pm line 104.
Day '' out of range 1..31 at

2: Ik ben een beetje een newbie, dat snap ik dus niet. In alle voorbeelden staat, dat ik de -T flag op regel 1 aan moet zetten. Waarom kan dat bij mij dan niet? Ik heb geen controle over de server, dus ik kan verder niks aanpassen.

Ik geloof inderdaad dat alle wijsheden wel ergens te vinden zijn, maar ik ben al 2 dagen aan het zoeken en kan het niet vinden. Sorry... Dank je wel iedergeval.

Verwijderd

code:
1
2
local ($Time::Local::sec,$Time::Local::min,$Time::Local::hours,$Time::Local::mday,$Time::Local::mon,$Time::Local::year);
my $time = timegm($Time::Local::sec, $Time::Local::min, $Time::Local::hours, $Time::Local::mday, $Time::Local::mon, $Time::Local::year);

Madness,
dit lijkt me in iedergeval helemaaaaal niks.

op perldoc vond ik onder time():
Returns the number of non-leap seconds since whatever time the system considers to be the epoch (that's 00:00:00, January 1, 1904 for MacOS, and 00:00:00 UTC, January 1, 1970 for most other systems). Suitable for feeding to gmtime and localtime.
dus
$var = time();

moet genoeg zijn B-)

  • Klaus_1250
  • Registratie: December 2000
  • Laatst online: 09-09 11:09
het is inderdaad madness, ik heb die andere manier al gebruikt. Maar nu heb ik nog steeds het probleem dat ik dus schijnbaar niet kan of niet weet hoe ik met een module moet werken. Waarom werkt het in het boek (Perl Cookbook en ook Programming Perl) wèl, en bij mij niet?
Pagina: 1