in reply to Pack uneven length hex
If you have a maximum length for your input sprintf may help: sprintf "%016s", EXPR. It will align all your inputs to your max size, although you could still remove the leading \0s. (And I'm assuming you do want a byte string as the output, otherwise hex might help)
requires you to actually have a variable declaredYou could use either map or for to alias the value of your EXPR to $_:
That's still not pretty (and you could do even worse, with an anonymous sub).print unpack "H*", pack("H*", map { "0" x (length($_) % 2) . $_ } "a12 +"); print unpack "H*", pack("H*", "0" x (length($_) % 2) . $_ ) for "a12";
I don't get the issue with your helper function and circular packages though. Can't you just put the fonction alone in a file, in the worst case? Or, if it really comes to it, just redefine it wherever you need, the function is fairly short anyway:
sub zpad { my ($str,) = @_; length($str)%2 ? "0$str" : $str } print unpack 'H*', pack 'H*', zpad "a30"
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Pack uneven length hex
by Anonymous Monk on Nov 24, 2018 at 06:39 UTC | |
by bliako (Abbot) on Nov 24, 2018 at 13:11 UTC | |
|
Re^2: Pack uneven length hex
by melez (Sexton) on Nov 23, 2018 at 10:22 UTC | |
by syphilis (Archbishop) on Nov 23, 2018 at 10:50 UTC | |
by Eily (Monsignor) on Nov 23, 2018 at 10:57 UTC |