Leser: 22
1
2
3
4
5
for my $str ( "str", "4str", "1.5str" ) {
print "yes, 4 == $str \n" if 4 == $str;
print "yes, 0 == $str \n" if 0 == $str;
print "yes, 1.5 == $str \n" if 1.5 == $str;
}
Argument "str" isn't numeric in numeric eq (==) at -e line 1.
1
2
3
4
5
6
if ( $var =~ m/\A[+-]?\d+\z/ ) { # $var is integer
printf "%d\n", $var;
}
else {
print "%s\n", $var;
}
QuoteEgal, ich bleib beim C, Perl ist eher was für Leute mit zu viel Zeit
1 2 3 4 5 6 7 8 9 10 11 12
#!/usr/bin/perl use strict; use warnings; use Inline C => <<'END_OF_C'; void greet(char *name) { printf("hello, %s!\n", name); } END_OF_C print "name: "; chomp( my $name = <STDIN> ); greet $name;
Guest alsoIch benötige einen Interpreter, mit dem ich rattattatttat für meine Arbeit (C für embedded Linux) Tools herunterklopfen kann. Perl ist ein Versuch, aber dieser undurchsichtige Datentypenwandel im Hintergrund macht mich ein wenig nervös und kostet Zeit zum Behirnen.
2010-08-14T08:04:37 neposGuest alsoIch benötige einen Interpreter, mit dem ich rattattatttat für meine Arbeit (C für embedded Linux) Tools herunterklopfen kann. Perl ist ein Versuch, aber dieser undurchsichtige Datentypenwandel im Hintergrund macht mich ein wenig nervös und kostet Zeit zum Behirnen.
Also ehrlich, da bist du aber generell schief gewickelt. Ich meine, wenn ich nicht besonders C kann, dann nehme ich auch nicht mal fix C um mir auf die Schnelle ein Hilfsmittel zu schrauben oder?
Schnell mal was schreiben, was einem Arbeit spart, geht meist mit den Tools, die man beherrscht. Wenn man dazu erstmal eine komplett neue Sprache lernen muss, die von den Konzepten her auch ein wenig anders funktioniert, als das gewohnte, dann kanns imho nicht auf die Schnelle klappen.
Nur mal so eine Meinung am Rande ;)
2010-08-13T23:13:39 MatthiasWWas genau möchtest du denn erreichen? In Perl wird grundsätzlich wenig "von Hand" konvertiert.
QuoteEgal, ich bleib beim C, Perl ist eher was für Leute mit zu viel Zeit
Man kann auch beides kombinieren ;-)
Code (perl): (dl )1 2 3 4 5 6 7 8 9 10 11 12#!/usr/bin/perl use strict; use warnings; use Inline C => <<'END_OF_C'; void greet(char *name) { printf("hello, %s!\n", name); } END_OF_C print "name: "; chomp( my $name = <STDIN> ); greet $name;
bzw. perlembed
MfG
1
2
3
4
5
6
7
8
9
10
#! /usr/bin/perl
use strict;
use warnings;
print "Ihre Eingabe? ";
chomp( my $input = <STDIN> );
print "Ihre Eingabe war '$input'\n";
__END__
Guest alsoAber du mußt schon zugeben, nach string "\n" zu suchen, das fällt einem wohl als letztes ein.
1
2
3
4
5
However, only double quotes "interpolate" variables and special
characters such as newlines ("\n"):
print "Hello, $name\n"; # works fine
print 'Hello, $name\n'; # prints $name\n literally
1 2 3 4 5 6 7 8
# aus dem binärdaten eine Liste von Zahlen machen my @chars=unpack('C*', $var); # jede zahl in HEX umwandeln; $_=sprintf('%02X',$_) for(@chars); # Liste zu einem mit Leerzeichen getrennten String zusammen führen $var=join(' ',@chars);
$var=join(' ',map{sprintf('%02X',$_)}unpack('C*', $var));
2010-08-14T13:17:05 topegAber "%8" bildet eine Quersumme über 8Bit "C*" nimmt ein oder mehr 8Bit Zeichen. Soweit ich das sehe bedeutet "%8C" "mache ein Quersumme über die ersten 8Bit die von C gelesen wurden". Du willst doch 8Bit in Perl-Zahlen umwandeln, oder sehe ich das falsch?
Edit: Korrektur
Gerade ausprobiert. "%8C*" nimmt die "C*" Blöcke und bildet über die ersten 8Bit aus jedem Block eine 8Bit Quersumme. Wenn im zu zerlegenden String nur ein Zeichen (8Bit) ist, wird nichts verändert, da eine 8bittige Quersumme über einen 8bittigen wert das Ergebnis nicht verändert.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#!/usr/bin/perl use strict; use warnings; use Term::ReadKey; ReadMode('cbreak'); while(1) { my @chars=read_all(); print join(' ',@chars)."\n" if(@chars); sleep(1); print localtime()."\n"; } sub read_all { my @ret; while(defined(my $char=ReadKey(-1))) { push(@ret,sprintf('%02X',unpack('C',$char))); } return @ret; }
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
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; # input devide # bei mir ist die Tastatur "/dev/input/event1" my $input=shift(@ARGV) || "/dev/input/event1"; # die länge von time ist # auf einem 64BitOS 8 Byte lang, # auf einem 32BitOS 4 Byte lang! my $time_lenth=(`uname -m`=~/_64/)?8:4; # heraus finden welche läng es ist! open(my $fh, '<', $input) or die("ERROR open $input ($!)\n"); binmode($fh); while(1) { eval{ local $SIG{ALRM}=sub{die}; while(1) { my $buffer; # Ein Event einlesen alarm(1); read($fh,$buffer,$time_lenth+4+2+2+4); alarm(0); if(defined($buffer)) { # Ein event setzt sich aus # time, utime, eventtype eventcode und eventvalue zusammen. my ($time,$utime,$type,$code,$value)=unpack(($time_lenth==4?'L':'Q').'LSSl',$buffer); print localtime($time).", $utime ==> $type,$code,$value\n"; } } }; sleep(1); print localtime()."\n"; } close($fh);