Gegeben sei eine Zeichenkette der Form
my $text = "xyz123";
Welche verschiedenen Möglichkeiten gibt es, das letzte Zeichen
zu entfernen? Was mir so einfällt:
1)
chop $text;
2)
$text = join '', (split //, $text)[0..length($text)-2];
3)
$text = substr $text, 0, length($text)-1;
4)
$text = join '', splice(@{[split //, $text]}, 0, length($text)-1);
5)
$text =~ s/.$//;
Genau dann wenn das letzte Zeichen ein Zeilenumbruch ist, kann man als
zusätzliche Variante auch chomp nehmen, aber das zähle ich mal nicht mit.
Das ideomatischste dürfte wohl Variante 1 - chop - sein. Die Idee zu
dieser Frage kam mir, als ich mir die Frage nach der ideomatischsten
Möglichkeit genau dies in einer anderen Programmiersprache (SAS) zu
tun stellte (da fällt mir nur eine substr-Entsprechung ein).
Hier mal mein Testcode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl
use strict;
use warnings;
my $text = "xyz123";
print "0) '$text'\n";
chop(my $text1 = $text);
print "1) '$text1'\n";
my $text2 = join '', (split //, $text)[0..length($text)-2];
print "2) '$text2'\n";
my $text3 = substr $text, 0, length($text)-1;
print "3) '$text3'\n";
my $text4 = join '', splice(@{[split //, $text]}, 0, length($text)-1);
print "4) '$text4'\n";
(my $text5 = $text) =~ s/.$//;
print "5) '$text5'\n";
mit der Ausgabe
0) 'xyz123'
1) 'xyz12'
2) 'xyz12'
3) 'xyz12'
4) 'xyz12'
5) 'xyz12'
Fallen Euch noch mehr Möglichkeiten ein?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite