|
| Find Space Fra : palle |
Dato : 16-01-08 10:47 |
|
Hej Gruppe
Et spørgsmål fra "kravlegården" , jeg kan ikke finde space i en linie
$test = "Førstedellinie Næstedellinie";
$where = index( $test , " ");
Her indeholder $where -1 hvordan finder jeg pos.
Hilsen
Palle
| |
Peter Makholm (16-01-2008)
| Kommentar Fra : Peter Makholm |
Dato : 16-01-08 10:55 |
|
"palle" <palle@java-spil.dk> writes:
> $test = "Førstedellinie Næstedellinie";
> $where = index( $test , " ");
>
> Her indeholder $where -1 hvordan finder jeg pos.
Det kan jeg ikke reproducere. Her kommer $where til at indeholde 14.
Er ovenstående klippet direkte ind fra hvor du observere problemet?
Husker du at bruge 'use strict' og 'use warnings'?
//Makholm
| |
palle (16-01-2008)
| Kommentar Fra : palle |
Dato : 16-01-08 11:23 |
|
"Peter Makholm" <peter@makholm.net writes:
> Er ovenstående klippet direkte ind fra hvor du observere problemet?
næææ... jeg ville gøre det lidt mere enkelt sorry...
her er det
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
if ($name eq "test ") { $test = $value;}
}
$where = index( $test , " ");
Håber du så kan se hvorfor problemet opstår netop med space....
Hilsen
Palle
| |
Peter Makholm (16-01-2008)
| Kommentar Fra : Peter Makholm |
Dato : 16-01-08 11:31 |
|
"palle" <palle@java-spil.dk> writes:
> "Peter Makholm" <peter@makholm.net writes:
>
>> Er ovenstående klippet direkte ind fra hvor du observere problemet?
>
> næææ... jeg ville gøre det lidt mere enkelt sorry...
Men du bruger ikke 'use warnings;' vel?
> her er det
>
> read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
> @pairs = split(/&/, $buffer);
> foreach $pair (@pairs)
> {
> ($name, $value) = split(/=/, $pair);
> $value =~ tr/+/ /;
> $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
> $FORM{$name} = $value;
>
> if ($name eq "test ") { $test = $value;}
> }
>
> $where = index( $test , " ");
Hvis du bruger 'use warnings' tror jeg at du vil få en 'Use of
uninitialized value in index' her. Jeg tror nemlig ikk eat $test
bliver sat af ovenstående.
//Makholm
| |
Peter Makholm (16-01-2008)
| Kommentar Fra : Peter Makholm |
Dato : 16-01-08 14:02 |
|
"palle" <palle@java-spil.dk> writes:
> "Peter Makholm" <peter@makholm.net> skrev
>
>> Men du bruger ikke 'use warnings;' vel?
>
> Nej jeg kan ikke køre det på denne computer, så jeg afvikler pt. direkte på
> internettet via den server jeg har adgang til.
Hvis du ikke lader perl hjælpe dig ved at bruge 'use strict' og 'use
warnings' så er det lidt spild af tid at jeg hjælper dig. Når du
udfører dit program som CGI-script kan du vist med fordel bruge 'use
CGI::Carp'.
Jeg tror stadigvæk at du får en 'Use of uninitialized value in index'
warning på linjen hvor du kalder 'index( $test, " ");' i det fulde
eksempel du har sendt.
> men eks. hvis $test = "Førstedellinie Næstedellinie" vil
> $where = index( $test , " Næstedellinie");
> komme med et positiv resultat... ligeledes
> $where = index( $test , " Førstedellinie");
> så hvorfor ikke
> $where = index( $test , " ");
Jeg får stadigvæk at $where bliver sat til 14 her.
> $show = substr($test ,10,1) er også en space
Det får jeg tilgengæld til 'l' når $test er "Førstedellinie Næstedellinie".
I dit fulde eksempel vil jeg derimod forvente du får en 'Use of
uninitialized value in substr' og en 'substr outside of string'
warning i linjen med substr og at $show bliver sat til ingenting.
For ikke at gøre en meget kort historie meget lang: Er du 100% sikker
på at $test indeholder det du tror? Jeg tror at $test er udefineret og
at en 'use warnings' ville have fortalt dig det gratis.
//Makholm
| |
Thorbjørn Ravn Ander~ (16-01-2008)
| Kommentar Fra : Thorbjørn Ravn Ander~ |
Dato : 16-01-08 14:06 |
|
"palle" <palle@java-spil.dk> writes:
> read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
> @pairs = split(/&/, $buffer);
> foreach $pair (@pairs)
> {
> ($name, $value) = split(/=/, $pair);
> $value =~ tr/+/ /;
> $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
> $FORM{$name} = $value;
>
> if ($name eq "test ") { $test = $value;}
> }
>
> $where = index( $test , " ");
>
> Håber du så kan se hvorfor problemet opstår netop med space....
Er der nogen speciel grund til at du selv koder sårn noget URL-dekodning
i stedet for at bruge en CPAN-pakke til formålet?
--
Thorbjørn Ravn Andersen
| |
Peter Makholm (16-01-2008)
| Kommentar Fra : Peter Makholm |
Dato : 16-01-08 15:43 |
|
"palle" <palle@java-spil.dk> writes:
> read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
> @pairs = split(/&/, $buffer);
> foreach $pair (@pairs)
> {
> ($name, $value) = split(/=/, $pair);
> $value =~ tr/+/ /;
> $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
> $FORM{$name} = $value;
>
> if ($name eq "test ") { $test = $value;}
Hint: Jeg tror ikke at denne betingelse bliver opfyldt.
> }
>
> $where = index( $test , " ");
| |
|
|