Schrift
[thread]6562[/thread]

Inhalt eines Arrays überprüfen: Wie macht man dass??? (Seite 2)



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Tom
 2004-09-05 20:29
#49873 #49873
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Also ich habe das noch etwas getestet, und habe festgestellt dass es nicht an diesem Code liegt

Code: (dl )
1
2
3
4
5
if (grep {$x_day==$_} @test){
$classkal = "kalender_bg";
}else{
$classkal = "kalender";
}


Das Problem liegt bei der Übergabe der Werte, ich übergebe von der Datei Kalender.cgi Werte an das Kalender-Modul so
Code: (dl )
print month_as_html("$rm","$ry","$links","$rechts","$cgi_path","$images_path","$datum","@test");


Im Kalender-Modul werden die Werte dann wieder Variablen zugewiesen.

Code: (dl )
my ($month, $year, $links, $rechts, $cgi_path, $images_path, $datum, @test) = @_;


Kann ich das Array @test so übergeben???

Denn wenn ich im Modul folgendes reinsetze, dann funktionierts.

Code: (dl )
my @test = (1, 5, 12, 24,);


Danke

Tom\n\n

<!--EDIT|Tom|1094401833-->
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
DS
 2004-09-05 21:46
#49874 #49874
User since
2003-08-04
247 Artikel
BenutzerIn
[default_avatar]
[quote=Tom,05.09.2004, 18:29]
Code: (dl )
print month_as_html("$rm","$ry","$links","$rechts","$cgi_path","$images_path","$datum","@test");
[/quote]
Uh, das ist aber schon ziemlich.... hm.... naja... *schweig*

Also, so sollte man das nicht machen / geht es nicht, weil du damit alle Variablen "stringifizierst", d.h. alle Variablen werden in einen String umgewandelt, was bei einigen eigentlich kein Problem darstellt, z.b. wenn es vorher schon ein String war, oder bei Zahlen, da diese von Perl hinterher wieder automatisch in den benötigten Typ umgewandelt werden, ABER: Referenzen würdest du auch diese weise "zerstören", bei einer Array Referenz würde z.b. "ARRAY(0x123456)" als String übergeben, das kann man dann allerdinge nicht mehr dereferenzieren...

Bei "@test" erhält du einen String, der alle Elemente des Strings mit - im Normalfall - einem Leerzeichen getrennt enthält. Beim "Abrufen" ladet dieser String dann als erstes Element in @test... deswegen geht's auch ned, bzw. nur, wenn @test vorher nur 1 Element enthalten hat...

Lösung: Alle " wegschmeissen, und den Array als Referenz übergeben mit \@test, beim Auslesen dann statt @test $testref schreiben und in der nächsten Zeile die Referenz mit my @test = @$testref; dereferenzieren... und du solltest dich noch ein wenig mit Datenstrukturen beschäftigen... ;)
Tom
 2004-09-05 21:51
#49875 #49875
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Quote
[quote=Tom,05.09.2004, 18:29]
Code: (dl )
print month_as_html("$rm","$ry","$links","$rechts","$cgi_path","$images_path","$datum","@test");

Uh, das ist aber schon ziemlich.... hm.... naja... *schweig*
[/quote]

Wie würde man das denn anders machen???


[quote=DS,05.09.2004, 19:46]Bei "@test" erhält du einen String, der alle Elemente des Strings mit - im Normalfall - einem Leerzeichen getrennt enthält. Beim "Abrufen" ladet dieser String dann als erstes Element in @test... deswegen geht's auch ned, bzw. nur, wenn @test vorher nur 1 Element enthalten hat...[/quote]
Das habe ich mittlerweile gemerkt!

Quote
Lösung: Alle " wegschmeissen, und den Array als Referenz übergeben mit \@test, beim Auslesen dann statt @test $testref schreiben und in der nächsten Zeile die Referenz mit my @test = @$testref; dereferenzieren...


Kannst du das mal etwas genauer erklären??? Vorallem mit dem $testref...

Quote
und du solltest dich noch ein wenig mit Datenstrukturen beschäftigen... ;)


OK

Danke

Tom\n\n

<!--EDIT|Tom|1094406795-->
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
Tom
 2004-09-05 21:58
#49876 #49876
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Tom,05.09.2004, 19:51]
Quote
Lösung: Alle " wegschmeissen, und den Array als Referenz übergeben mit \@test, beim Auslesen dann statt @test $testref schreiben und in der nächsten Zeile die Referenz mit my @test = @$testref; dereferenzieren...


Kannst du das mal etwas genauer erklären??? Vorallem mit dem $testref...[/quote]
Das hat sich erledigt, nach mehrmaligem lesen habe ichs kapiert.

Funktioniert jetzt ;)

Danke Dir vielmals!!!

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
DS
 2004-09-05 22:10
#49877 #49877
User since
2003-08-04
247 Artikel
BenutzerIn
[default_avatar]
[quote=Tom,05.09.2004, 19:51]Kannst du das mal etwas genauer erklären??? Vorallem mit dem $testref...[/quote]
Code (perl): (dl )
1
2
3
4
5
6
7
print month_as_html ($rm,$ry,$links,$rechts,$cgi_path,$images_path,$datum,\@test);
.
.
.
sub month_as_html {
  my ($rm,$ry,...,$testref) = @_;
  my @test = @$testref;

Oder statt $testref einfach nur $test, und dann hinterher beim grep statt @test @$test...

perlref

Nachtrag: Tja, dann war ich zu spät... ;)

Bitte... :)\n\n

<!--EDIT|DS|1094407930-->
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2004-09-02 21:13.