[perl] _ in string negeren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • GreenGolf3
  • Registratie: Augustus 2000
  • Laatst online: 11-04 11:58
Ik heb een perl script dat de volumes van een netapp uitleest en deze doorgeeft aan de monitoring. Echter zijn er volumes die ik niet in de monitoring wil zien. Het script moet deze volumes overslaan. Dit heb ik voor een aantal volumes voor elkaar gekregen op de volgende manier:

while (my($key,$value) = each(%$result)) {
next if $value eq 'aggr0/.snapshot';
next if $value eq 'aggr0';

Echter heb ik ook volumes waar een _ in de volume naam zit:
next if $value eq '/vol/CS01_F';

Echter werkt de eq niet. Hij lijkt op die _ fout te lopen. Ik heb al geprobeerd om het geheel met een \ te ontkrachten, maar dat levert geen resultaat op. Ook het gebruik van == ipv eq levert geen verbetering op.

Is er een manier om die _ te ontkrachten of moet ik mijn vergelijking op een andere manier opbouwen?

Specs workstation Nikon D200 / 17-55 F/2.8 / SB-800 / 24-120


Acties:
  • 0 Henk 'm!

  • DeoDupke
  • Registratie: Maart 2002
  • Laatst online: 26-03-2024
Wat is de waarde van $value als je hem print?

En wat bedoel je met het ontkrachten van een _ ?

No worries m8


Acties:
  • 0 Henk 'm!

  • GreenGolf3
  • Registratie: Augustus 2000
  • Laatst online: 11-04 11:58
DeoDupke schreef op woensdag 10 februari 2010 @ 12:05:
Wat is de waarde van $value als je hem print?

En wat bedoel je met het ontkrachten van een _ ?
De waarde van $value is /vol/CS01_F De rest van de $value's kloppen ook allemaal.

Er zijn een aantal speciale karakters zoals een "/" die in bepaalde senario's ontkracht moeten worden.Ten minste, dat is wat ik hier lees:
Huh? Why doesn't "\d" match the exact characters '\' and 'd'?

This is because Perl uses characters from the alphabet to also match things with special meaning, like digits. To differentiate between matching a regular character and something else, the character is immediately preceded by a backslash. Therefore, whenever you read '\' followed by any character, you treat the two together as one symbol. For example, '\d' means digit, '\w' means alphanumeric characters including '_', '\/' means forward slash, and '\\' means match a single backslash. Preceding a character with a '\' is called escaping, and the '\' together with its character is called an escape sequence.

Specs workstation Nikon D200 / 17-55 F/2.8 / SB-800 / 24-120


Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 17:54
Nou dat staat er dan toch?

Gewoon checken op

\_

ipv

_

Acties:
  • 0 Henk 'm!

  • DeoDupke
  • Registratie: Maart 2002
  • Laatst online: 26-03-2024
Je linkt hier naar een site waar regular expressions staan uitgelegd terwijl je in jouw code daar geen gebruik van maakt. Je gebruikt eq wat gewoon 2 strings checkt op equality.

Als je nu eens een simpele if pakt en daar je value hardcoded inzet dan zul je zien dat hij overeenkomt. (en je dus niks hoeft te escapen) Wanneer jouw $value dus not equal geeft betekent het dat je $value dus een andere waarde heeft dan dat jij denkt dat hij heeft. (let op hoofdlettergevoeligheid, spaties voor of na etc)
code:
1
2
3
4
5
6
7
$value = '/vol/CS01_F';

if ($value eq '/vol/CS01_F'){
    print "is equal";
}else{
        print "not equal";
}

No worries m8


Acties:
  • 0 Henk 'm!

  • GreenGolf3
  • Registratie: Augustus 2000
  • Laatst online: 11-04 11:58
DeoDupke schreef op woensdag 10 februari 2010 @ 13:49:
Je linkt hier naar een site waar regular expressions staan uitgelegd terwijl je in jouw code daar geen gebruik van maakt. Je gebruikt eq wat gewoon 2 strings checkt op equality.

Als je nu eens een simpele if pakt en daar je value hardcoded inzet dan zul je zien dat hij overeenkomt. (en je dus niks hoeft te escapen) Wanneer jouw $value dus not equal geeft betekent het dat je $value dus een andere waarde heeft dan dat jij denkt dat hij heeft. (let op hoofdlettergevoeligheid, spaties voor of na etc)
code:
1
2
3
4
5
6
7
$value = '/vol/CS01_F';

if ($value eq '/vol/CS01_F'){
    print "is equal";
}else{
        print "not equal";
}
Met die eenvoudige if krijg ik inderdaad te zien dat mijn $value gelijk is. Dat betekent dat mijn gedefinieerde waarde van $value goed is. Echter, laat ik het script $value vullen, dan werkt het niet meer. Het lijkt erop dat ik een andere waarde terug krijg dan ik verwacht. Terwijl een print wel de juiste waarde laat zien.

Erg vreemd.

UPDATE: En nu wrkt het wel weer :? De regel die ik nu gebruik is:

next if $value eq '/vol/CS01_G/';

En nu verbergt hij de ongewenste volumes wel. Nha ja....

Probleem opgelost. Dank voor de hulp!

[ Voor 8% gewijzigd door GreenGolf3 op 10-02-2010 16:59 ]

Specs workstation Nikon D200 / 17-55 F/2.8 / SB-800 / 24-120

Pagina: 1