/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
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 , " ");


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste