Schrift
[thread]6485[/thread]

Arrayref aus Skalar-Rückgabewert (Seite 2)

Leser: 1


<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
pktm
 2004-08-11 20:40
#85678 #85678
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Das Problem ist, dass das was in der Doku steht bei mir nicht zutrifft.
Wenn ich invalid mit Parameter aufrufe und nur einer zurück kommt kommt ein Scalar zurück und keine Arrayref mit einem Element. Das ist nämlich mein Problem...
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
steffenw
 2004-08-11 22:53
#85679 #85679
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
@esskar hat recht. Ich kann das my nicht einfach mittendrin mir reinschreiben, aber so geht es.

Beispielscript:
Code: (dl )
1
2
3
4
5
6
7
8
use strict;
use warnings;

for ('Scalar', ['1. Arrayelement'])
{ my $feld;
ref($feld = $_) eq 'ARRAY' and $feld = $_->[0];
print "$feld\n";
}
Ergebis:
Scalar
1. Arrayelement
$SIG{USER} = sub {love 'Perl' or die};
pq
 2004-08-12 11:15
#85680 #85680
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
[quote=pktm,11.08.2004, 18:40]Das Problem ist, dass das was in der Doku steht bei mir nicht zutrifft.
Wenn ich invalid mit Parameter aufrufe und nur einer zurück kommt kommt ein Scalar zurück und keine Arrayref mit einem Element.[/quote]
was ist das denn für eine methode, an der doku vorbeizuprogrammieren? meinst
du, das bringt dir irgendwas? wenn was in der doku steht und es nicht so
funktioniert, solltest du den autor benachrichtigen.
in der version 3.59, die ich gerade runtergeladen habe, funktioniert jedenfalls
alles, so wie es soll.
das problem ist doch, wenn man sich einem bug anpasst, der in der nächsten
version gefixt wird, hat man ein problem. *kopfschüttel*
jetzt wüsste ich noch gern, welche version du benutzt und würde gerne
ein kleines beispiel-programm sehen, das das verhalten demonstriert.
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
$ perl -MData::Dumper -Iblib/lib -wle'
use Data::FormValidator;
my $prof = {
 required => [qw(email)],
 constraints => { email => "email" }
};
my $res = Data::FormValidator->check({email => "test"}, $prof);
my @a = $res->invalid;
my $s = $res->invalid;
my $e = $res->invalid("email");
print Dumper \@a;
print Dumper $s;
print Dumper $e'
$VAR1 = [
         'email'
       ];
$VAR1 = {
         'email' => [
                      'email'
                    ]
       };

$VAR1 = [
         'email'
       ];
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
lichtkind
 2004-08-13 05:38
#85681 #85681
User since
2004-03-22
5703 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
gibt es auch etwas wie isSkalar??
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
esskar
 2004-08-13 06:20
#85682 #85682
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=lichtkind,13.08.2004, 03:38]gibt es auch etwas wie isSkalar??[/quote]
jein
Code: (dl )
1
2
3
4
sub is_scalar
{
  return ref(shift) ? 0 : 1;
}
\n\n

<!--EDIT|esskar|1092363731-->
lichtkind
 2004-08-13 18:49
#85683 #85683
User since
2004-03-22
5703 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
aaaaah

ne mir war eigentlich nur die bedeutung von ref entfallen

danke
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
pktm
 2004-08-14 02:17
#85684 #85684
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Data::FormValidator - $VERSION = '3.59';
Code: (dl )
1
2
3
4
5
6
7
if( $results->has_invalid() ) { # get the name of 1st invalid field
my @ref = $results->invalid();
#print STDERR Data::Dumper::Dumper( @ref );
my $feld = $ref[0];
push @{$data}, { 'Error' => $results->msgs()->{$feld} };

}

Den Umweg über @ref habe ich jetztgemacht, da ich so keinen Fehler bekomme.

Quote
'dfv_profile' => {
# dev: go2success back rm <= unknon fields? müssen die rein?
optional => [qw(Firma Fax eMail Text Zimmertyp_2 Anzahl_2 Zimmertyp_3 Anzahl_3 Text go2success back)],
required => [qw(Name Vorname Strasse Hausnummer PLZ Ort Land Telefon Anreise_Tag Anreise_Monat Anreise_Jahr Abreise_Tag Abreise_Monat Abreise_Jahr Zimmertyp_1 Anzahl_1 rm)],
constraints => {
# name a constraint, useful for returning error messages
eMail => {
name => 'emailValid',
constraint => qr/^[\w\d][\w\d\.\-]*\@([\w\d\-]+\.)+[a-zA-Z]{2,4}$/,
},
}, # /contraints
msgs => {
constraints => {
'emailValid' => 'Bitte geben Sie eine gültige eMail-Adresse ein oder lassen Sie das Feld leer',
}, # /constraints
# This token will be included in the hash if there are
# any errors returned. This can be useful with templating
# systems like HTML::Template
# The 'prefix' setting does not apply here.
# defaults to undefined
any_errors => 'FehlerLoop',
}, # /msgs
}, # /dfv_profile

Da sind meine Formparameter und die damalige Version der Beschränkung(en).

Wenn ich auf die eine Msg. zur ungültigen eMail zugreifen wolle
$results->invalid()->[0];
habe ich immer den Fehler erhlaten: "not an arrayref".
Werde es bei Gelegenhiet nochmal überarbeiten.
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
pq
 2004-08-14 13:10
#85685 #85685
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
[quote=pktm,14.08.2004, 00:17]Wenn ich auf die eine Msg. zur ungültigen eMail zugreifen wolle
$results->invalid()->[0];
habe ich immer den Fehler erhlaten: "not an arrayref".[/quote]
sag das doch gleich =)
das ist auch logisch.
$results->invalid()->[0] ruft invalid in skalarem kontext auf (denn '->[0] impliziert ein arrayref). aber im skaleren kontext gibt invalid ja
eine hashref zurück.
du müsstest ($results->invalid)[0] aufrufen, dann ist invalid() im
listenkontext.
aber was ich nicht verstehe:
"Wenn ich auf die eine Msg. zur ungültigen eMail zugreifen wolle
$results->invalid()->[0];"
wieso rufst du invalid() ohne parameter auf, wenn du doch die message für
email erhalten willst?
$results->invalid("email")->[0] sollte gehn.
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
pktm
 2004-08-14 15:39
#85686 #85686
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Quote
"Wenn ich auf die eine Msg. zur ungültigen eMail zugreifen wolle
$results->invalid()->[0];"
wieso rufst du invalid() ohne parameter auf, wenn du doch die message für
email erhalten willst?
$results->invalid("email")->[0] sollte gehn.

Nun ich möchte mit dem Aufruf > im aktuellen Beispiel < die Msg. zum Formularfeld eMail aufrufen, weil ja nur dieses auf Validität geprüft wird.
Jetzt, wo ich noch andere Felder drinne habe ist es eventuell ein anderes (zufälliges, da ja in Hashref abgelegtes, vgl. $dfv_profile) Feld, für welches die Fehlermeldung abgerufen werden soll.

Was ich jetzt noch nicht verstehe:
Wieso klappt der Aufruf $results()->[0] wenn ich mehrere Msgs. im dfv_profile drinne habe???
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
esskar
 2004-08-14 16:02
#85687 #85687
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
hast du dir eigentlich mal CPAN:Params::Check angeschaut?\n\n

<!--EDIT|esskar|1092484993-->
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2004-08-10 22:28.