Thread Konsolenbefehl als Subroutine (Substitution) (5 answers)
Opened by JuMi2006 at 2012-09-21 10:37

topeg
 2012-09-23 23:07
#162013 #162013
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Da nun klar ist das es funktioniert. Hier eine bessere Möglichkeit Hex-Strings zu konvertieren als mit $raw =~ s/([0-9a-f]{2})/chr( hex( $1 ) )/gie;:

Code (perl): (dl )
1
2
3
4
5
my $hexstr = '0015070400a4';

my $raw =pack('H*',$hexstr);

$hexstr=unpack('H*',$raw);


pack und unpack wurden aus genau dem Grund in Perl eingebaut. Sie erlauben es komplexe Binäre Datenstrukturen zu erzeugen oder zu dekodieren. Das ist ähnlich zu "struct" aus C.

2012-09-23T19:48:19 JuMi2006
Nach der Substitution waren es doch lediglich die Klammern um $1 die das Script blockierten aber die Kommandozeile richtig interpretierte?

Ich verstehe die Frage nicht. Die Klammern haben nichts blockiert, die habe ich nur aus Gewohnheit gesetzt. Und die Kommandozeile wurde nicht richtig Interpretiert. system($str) (Aufruf mit nur einem Parameter) führt die Shell aus um die den String zu interpretieren. Bei binären Anteilen können seltsame Sachen passieren, speziell wenn ein "\00" auftaucht. Das wird manchmal fälschlicherweise als Stringende interpretiert. Zudem kann die Shell mit ihrer Zeichenkodierung dazwischen pfuschen und versuchen den Binärastring in eine andere Zeichenkodierung zu wandeln.
Da ist das Senden von Zeichen über STDIN mit open Sicherer, da man mehr Kontrolle darüber hat wie die Zeichenketten behandelt werden.
Will man noch mehr Kontrolle benutzte man die Module CPAN:IPC::Open2 oder CPAN:IPC::Open3

View full thread Konsolenbefehl als Subroutine (Substitution)