Entferne ein Leerzeichen von einer Perl-Variablen

7

Ich habe eine Menge Probleme mit einer einfachen Suche und Ersetzung. Ich habe versucht, die Lösung in angeboten Wie entferne ich Leerzeichen in einer Perl-Zeichenfolge? aber konnte das nicht drucken.

Hier ist mein Beispielcode:

%Vor%

Ich habe verschiedene Wege versucht, aber ich konnte das nicht.

Mein Endergebnis besteht darin, einige Aspekte des Verschiebens von Dateien in einer Linux-Umgebung zu automatisieren, aber manchmal haben die Dateien Leerzeichen im Namen, daher möchte ich den Platz aus der Variable entfernen.

    
M Alhassan 26.06.2013, 20:53
quelle

4 Antworten

19

Du bist fast da; Sie sind nur verwirrt über die Rangfolge der Operatoren. Der Code, den Sie verwenden möchten, ist:

%Vor%

Zunächst wird damit der Variablen $hello der Wert der Variablen $hello_nospaces zugewiesen. Dann führt es die Ersetzungsoperation an $hello_nospaces durch, als ob Sie

sagten %Vor%

Weil der Bindeoperator =~ eine höhere Priorität hat als der Zuweisungsoperator = , so wie Sie ihn geschrieben haben

%Vor%

führt zuerst die Substitution in $hello durch und weist dann das Ergebnis der Substitutionsoperation (in diesem Fall 1) der Variablen $hello_nospaces zu.

    
mob 26.06.2013 21:00
quelle
8

Ab 5.14 bietet Perl eine nicht-destruktive Option s/// :

  

Zerstörungsfreie Substitution

     

Die Operatoren Substitution ( s/// ) und Transliteration ( y/// ) unterstützen jetzt eine Option /r , die die Eingabevariable kopiert, die Substitution auf der Kopie ausführt und das Ergebnis zurückgibt. Das Original bleibt unverändert.

%Vor%
  

Dies ist besonders nützlich mit map . Siehe perlop für weitere Beispiele.

Also:

%Vor%

sollte tun, was Sie wollen.

    
Sinan Ünür 27.06.2013 01:33
quelle
4

Sie müssen nur Klammern hinzufügen, damit Perls Parser verstehen kann, was Sie tun sollen.

%Vor%

bis

%Vor%     
Hunter McMillen 26.06.2013 21:00
quelle
3

Teilen Sie diese Zeile:

%Vor%

In diese zwei:

%Vor%

Aus dem offiziellen Perl Regex-Lernprogramm :

  

Wenn es eine Übereinstimmung gibt, gibt s /// die Anzahl der vorgenommenen Ersetzungen zurück; Andernfalls wird false zurückgegeben.

    
Vladimir Georgiev 26.06.2013 20:58
quelle

Tags und Links