Schrift
[thread]7097[/thread]

Vermeiden von no strict 'refs';

Leser: 1


<< |< 1 2 >| >> 14 Einträge, 2 Seiten
Taulmarill
 2005-07-04 12:24
#55934 #55934
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
meine glaskugel ist gerade in der reinigung. wenn du uns den code postest, der den fehler verursacht (evtl. auch noch nen paar zeilen davor und danach), dann können wir die aber evtl. trotzdem helfen.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Taulmarill
 2005-07-04 12:37
#55935 #55935
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
legitim ist so etwas imho nur, wenn es keine "vernünftige" lösung gibt.
nicht falsch verstehen, du darfst meinetwegen so coden wie du das willst. aber meistens wird so etwas unnötig benutzt.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
prassito
 2005-07-04 12:16
#55936 #55936
User since
2005-05-31
8 Artikel
BenutzerIn
[default_avatar]
Hoi

In meinem Perl-Skript, include ich ein Perl-Modul.
Das Permodul hat zwei Methoden, die ich mit Parametern aufrufen muss.
Primär hatte ich "use strict" drinnen, was mir dann den Fehler

Can't use string ("methode1") as a subroutine ref while "strict refs" in use at...

Mit "no strict 'refs';" hat es dann funktioniert.

Kann mir jemand nen Tip geben, wie ich meine Skripte anpassen muss, damit ich "no strict 'refs';" nicht benötige?

Danke vorneweg und Gruss

prassman
ptk
 2005-07-04 12:32
#55937 #55937
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Du hast also was in der Art:
Code: (dl )
my $x="methode1"; &$x
? no strict refs ist hier legitim. Du kannst den no-strict-Block klein machen, damit du einen versehentlichen Fehler an einer anderen Stelle nicht uebersiehst.
pq
 2005-07-04 12:47
#55938 #55938
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
hmm. verschoben von PHP nach Perl
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
prassito
 2005-07-04 13:00
#55939 #55939
User since
2005-05-31
8 Artikel
BenutzerIn
[default_avatar]
Hoi

Stimmt ich merks grad...der Code-Schnipsel ist etwas dünn geraten...so hier mal ausführlicher (alle Skripte gekürzt).

Gruss

prassman


Das Hauptskript (Fehler wird bei if($NewsType[$i][3]) geworfen):

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
use strict;
no strict 'refs';
use DBI;
use POSIX;
use sigtrap qw(handler terminate_receive normal-signals);
use Compress::Zlib;
use IO::Socket;

my $mypath = "/usr/local";
require $mypath."/news-types.pl";
use vars qw(@NewsType);

use News;

...


for (my $i=1; $i<=$#NewsType; $i++)
{
   my $news;
   if($NewsType[$i][3])
   {
       ...
   }
}



# Das Modul mit den Funktionen (News.pm):

package News;

require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(sendnews receivenews);

use strict;
use warnings;

sub sendnews
{
   ...
}

sub receivenews
{
   ...
}


# Die Newsarten (news-types.pl):

use vars (@NewsType);
$NewsType[0]=['NewsData','News','receivenews','sendnews'];



edit pq: code-tags hinzugefügt\n\n

<!--EDIT|pq|1120471906-->
esskar
 2005-07-04 14:28
#55940 #55940
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
versuch es so

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
for (my $i=1; $i<=$#NewsType; $i++)
{
my $news;
{
no strict 'refs';
if($NewsType[$i][3])
{
...
}
}
}


und lass dafür das no strict 'refs'; oben im script weg!
betterworld
 2005-07-04 17:05
#55941 #55941
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Quote
Code: (dl )
$NewsType[0]=['NewsData','News','receivenews','sendnews'];

Ist @NewsData und so weiter ein Array? Dann versuche doch statt 'NewsData' einfach mal \@NewsData, das muesste dann auch mit strict refs gehen.\n\n

<!--EDIT|betterworld|1120482461-->
Taulmarill
 2005-07-04 18:01
#55942 #55942
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
zum erstellen von Globalen Variablen würde ich eher die funktion our benutzen. lösche die zeilen mit dem vars pragma und deklariere ausschliesslich in der News.pm mit our @NewsType;, dann sollte das Array global zur verfügung stehen.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Strat
 2005-07-04 18:11
#55943 #55943
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Taulmarill,04.07.2005, 16:01]zum erstellen von Globalen Variablen würde ich eher die funktion our benutzen.[/quote]
witzig; ich verwende our so gut wie nie, sondern immer use vars...

our laeuft vor perl5.6 nicht, und zweitens finde ich use vars aus psychologischer sicht her geschickter, weil da einfach die hemmschwelle groesser ist, mal so eben eine globale variable zu verwenden. Und nebenbei hat man die ganzen globalen Variablen (falls es doch mal wieder mehr werden sollten) an einer Stelle deklariert und braucht nicht lange nach our zu suchen...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2005-07-04 12:24.