develooper Front page | perl.beginners | Postings from March 2011

Re: transposing %d values to %x output

Thread Previous | Thread Next
From:
Uri Guttman
Date:
March 29, 2011 23:15
Subject:
Re: transposing %d values to %x output
Message ID:
87fwq5b0c5.fsf@quad.sysarch.com
>>>>> "JWK" == John W Krahn <jwkrahn@shaw.ca> writes:

  JWK> Shawn H Corey wrote:
  >> On 11-03-29 07:50 PM, Noah Garrett Wallach wrote:
  >>> 
  >>> s/(\d+)\.(\d+)\.(\d+)\.(\d+)/$1:$2:$3:$4::0/
  >>> 
  >>> so is there a slick, easily readable way to get the value $1, $2, $3, $4
  >>> to be rewriten as %x instead of a %d?
  >> 
  >> s/(\d+)\.(\d+)\.(\d+)\.(\d+)/sprintf('%x:%x:%x:%x::0',$1,$2,$3,$4)/e;

  JWK> Might be better as:

  JWK> sprintf '%x:%x:%x:%x::0', /(\d+)\.(\d+)\.(\d+)\.(\d+)/;

  JWK> So you don't have to use eval.

that works too but don't confuse /e with string eval. in /e the code is
compiled at compile time, not runtime so it is safe and you can't do
anything more dangerous as regular code could. on the otherhand, /ee
(which does work by accident of larry! :) does call string eval on the
result of the replacment expression.

the other difference is that the s///e version replaces the IP with a
hex version and yours needs to be assigned back to the variable. not a
big diff.

and if you are only working on an ip address with no other text, you can
even reduce yours (and the others) to a single (\d+) with /g:

	sprintf '%x:%x:%x:%x::0', /(\d+)/g ;

the s/// could be rewritten like this (note both /e and /g are used):

	$ip =~ s/(\d+)\.?/sprintf('%x:',$1)/eg ;
	$ip .= ':0' ;

here is a working example:

perl -le '$x ="12.23.34.56"; $x =~ s/(\d+)\.?/sprintf("%x:",$1)/eg; print $x'
c:17:22:38:

uri

-- 
Uri Guttman  ------  uri@stemsystems.com  --------  http://www.sysarch.com --
-----  Perl Code Review , Architecture, Development, Training, Support ------
---------  Gourmet Hot Cocoa Mix  ----  http://bestfriendscocoa.com ---------

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About