Thread Stringvergleich geht nicht.. (18 answers)
Opened by introdev at 2019-10-07 17:36

rosti
 2019-10-13 09:31
#190701 #190701
User since
2011-03-19
3199 Artikel
BenutzerIn
[Homepage]
user image
Quote
Es kommt sicher auf den Programmierstil an.


Nein, es kommt darauf an zu verstehen was chomp macht: Es entfernt genau die bzw das Zeichen was in $/ voreingestellt ist. Hierzu die Demo:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
my $s = "A\r\n";
say "@{[map{sprintf '%02X', $_} unpack 'C*', $s]}"; # 41 0D 0A
say chomp $s;                                       # 1
say "@{[map{sprintf '%02X', $_} unpack 'C*', $s]}"; # 41 0D

# ändere die Voreinstellung für $/
$/ = "\r\n";
$s = "B\r\n";
say chomp $s;                                       # 2
say "@{[map{sprintf '%02X', $_} unpack 'C*', $s]}"; # 42


Während also beim ersten chomp nur ein Zeichen, nämlich das Newline "\n" entfernt wird, was der Voreinstellung auf meinem System entspricht, entfernt chomp beim zweiten Text beide Zeichen "\r\n".

Tipp: Nutze die Möglichkeit des dynamischen Scope:

Code (perl): (dl )
1
2
3
4
5
6
# benutzerdefinierte Einstellung 
# für $/ in dynamischen Scope
do{
  local $/ = "\r\n";
  #...
};


Das ist eine Besonderheit von Perl was nicht jede Programmiersprache bietet


.


PS: Noch einfacher
Code (perl): (dl )
1
2
my $s = "€\r\n";
$s = unpack "A*", pack "A*", $s;



MFG
Last edited: 2019-10-13 12:00:09 +0200 (CEST)

View full thread Stringvergleich geht nicht..