Thread welchen Programmierstil findet ihr lesbarer? (13 answers)
Opened by lichtkind at 2010-08-10 20:43

lichtkind
 2010-08-10 20:43
#140518 #140518
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
Also in Pisa ist ein Buch quasi von der Rampe gefallen: wicked cool perl scripts. unter anderem taucht darin folgendes Beispiel auf.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
use strict;
use warnings;

sub usage ()
{
        print STDERR "Usage $0 <unix|linux|dos|mac|apple>\n";
        exit(8);
}

binmode(STDIN);
binmode(STDOUT);

my $eol = "\n";

if ($#ARGV != 0){
        usage();
}
if ($ARGV[0] eq 'linux') {
        $eol = "\n";
} elsif ($ARGV[0] eq 'unix') {
        $eol = "\n";
} elsif ($ARGV[0] eq 'dos') {
        $eol = "\r\n";
} elsif ($ARGV[0] eq 'apple') {
        $eol = "\r";
} elsif ($ARGV[0] eq 'mac') {
        $eol = "\r";
} else {
        usage();
}

while (1) {
        my $ch;     # Character from input

        # Read a character
        my $status = sysread(STDIN, $ch, 1);
        if ($status <= 0){
                last;
        }

        if ($ch eq "\n"){
                syswrite(STDOUT, $eol);
                next;
        }

        if ($ch eq "\r"){
                my $next_ch;     # Check for \r\n
                $status = sysread(STDIN, $next_ch, 1);
                if ($status <= 0){
                        syswrite(STDOUT, $eol);
                        last;
                }

                # Check for \r\n
                if ($next_ch eq "\n"){
                        syswrite(STDOUT, $eol);
                        next;
                }

                syswrite(STDOUT, $eol);
                $ch = $next_ch;
        }

        syswrite(STDOUT, $ch);
}

daraus machte ich
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use feature ":5.12";

sub usage { die "Usage $0 <unix|linux|dos|win|mac|apple>\n" }
usage() if $#ARGV != 0;

my $eol;
given ($ARGV[0]){
        when ([qw(unix linux)]){ $eol =   "\n" }
        when ([qw(dos win)])   { $eol = "\r\n" }
        when ([qw(apple mac)]) { $eol = "\r"   }
        default { usage() }
}

binmode(STDIN);
binmode(STDOUT);

my $last;
while (sysread(STDIN, my $ch, 1) > 0) {
        if ($ch eq "\r" or $ch eq "\n"){ 
                syswrite(STDOUT, $eol) unless $last eq "\r" and $ch eq "\n";
        } else { 
                syswrite(STDOUT, $ch)
        }
        $last = $ch;
}

P.S. ja mit regex gehts sicher noch kürzer
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.

View full thread welchen Programmierstil findet ihr lesbarer?