[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

equivalent idiom for ruby " perl -pe 's/(\d+)/localtime($1)/e'"

Peña, Botp

3/21/2005 3:15:00 AM

Hi,

forgive my perl ignorance, but how do you convert the ff perl idiom to
ruby(way):

perl -pe 's/(\d+)/localtime($1)/e' /var/log/squid/access.log

thank you
-botp


7 Answers

Jim Freeze

3/21/2005 3:42:00 AM

0

* "Peña, Botp" <botp@delmonte-phil.com> [2005-03-21 12:14:31 +0900]:

> Hi,
>
> forgive my perl ignorance, but how do you convert the ff perl idiom to
> ruby(way):
>
> perl -pe 's/(\d+)/localtime($1)/e' /var/log/squid/access.log

I think it would be

ruby -pe '$_.gsub!(/(\d+)/, Time.local("\\1".to_i).to_s)' /var..access.log

--
Jim Freeze
Code Red. Code Ruby



James Gray

3/21/2005 3:52:00 AM

0

On Mar 20, 2005, at 9:14 PM, Peña, Botp wrote:

> Hi,
>
> forgive my perl ignorance, but how do you convert the ff perl idiom to
> ruby(way):
>
> perl -pe 's/(\d+)/localtime($1)/e' /var/log/squid/access.log

ruby -pe 'gsub!(/\d+/) { |t| Time.at(t.to_i) }'
/var/log/squid/access.log

I think.

James Edward Gray II




Jason Sweat

3/21/2005 3:58:00 AM

0

On Mon, 21 Mar 2005 12:51:43 +0900, James Edward Gray II
<james@grayproductions.net> wrote:
> On Mar 20, 2005, at 9:14 PM, Peña, Botp wrote:
>
> > Hi,
> >
> > forgive my perl ignorance, but how do you convert the ff perl idiom to
> > ruby(way):
> >
> > perl -pe 's/(\d+)/localtime($1)/e' /var/log/squid/access.log
>
> ruby -pe 'gsub!(/\d+/) { |t| Time.at(t.to_i) }'
> /var/log/squid/access.log
>
> I think.
>
> James Edward Gray II
>
>

cat /var/log/squid/access.log | ruby -pe '$_.gsub!(/^(\d+)/,
Time.at($1.to_i).to_s)'

seemed to work for me

Regards,
Jason
http://blog.casey...



Michael Campbell

3/21/2005 5:04:00 AM

0

> cat /var/log/squid/access.log | ruby -pe '$_.gsub!(/^(\d+)/,
> Time.at($1.to_i).to_s)'

No need for "cat" there.


Jason Sweat

3/21/2005 5:18:00 AM

0

On Mon, 21 Mar 2005 14:04:10 +0900, Michael Campbell
<michael.campbell@gmail.com> wrote:
> > cat /var/log/squid/access.log | ruby -pe '$_.gsub!(/^(\d+)/,
> > Time.at($1.to_i).to_s)'
>
> No need for "cat" there.

Yes, I started from what Jim Freeze posted above, and switched to the
"cat" style during testing of the Time stuff, never switched it back.
I see that

ruby -pe '$_.gsub!(/^(\d+)/, Time.at($1.to_i).to_s)' /var/log/squid/access.log

works as well.

Regards,
Jason


WATANABE Hirofumi

3/21/2005 6:04:00 AM

0

Hi,

Jason Sweat <jason.sweat@gmail.com> writes:

> I see that
>
> ruby -pe '$_.gsub!(/^(\d+)/, Time.at($1.to_i).to_s)' /var/log/squid/access.log
>
> works as well.

$1 becomes a result of the match last time, beause $1 is
evaluated before gsub! is called.

% ruby -e '1111111111.upto(1111111115){|i| puts i}' | ruby -pe '$_.gsub!(/^(\d+)/, Time.at($1.to_i).to_s)'
Thu Jan 01 09:00:00 JST 1970
Fri Mar 18 10:58:31 JST 2005
Fri Mar 18 10:58:32 JST 2005
Fri Mar 18 10:58:33 JST 2005
Fri Mar 18 10:58:34 JST 2005

So you should use a block.

% ruby -e '1111111111.upto(1111111115){|i| puts i}' | ruby -pe '$_.gsub!(/^(\d+)/){Time.at($1.to_i).to_s}'
Fri Mar 18 10:58:31 JST 2005
Fri Mar 18 10:58:32 JST 2005
Fri Mar 18 10:58:33 JST 2005
Fri Mar 18 10:58:34 JST 2005
Fri Mar 18 10:58:35 JST 2005

Golf:

% echo 1111111111 |ruby -pe 'sub(/^\d+/){Time.at($&.to_i)}'
Fri Mar 18 10:58:31 JST 2005

--
eban


Florian Gross

3/21/2005 4:25:00 PM

0

WATANABE Hirofumi wrote:

> Golf:
>
> % echo 1111111111 |ruby -pe 'sub(/^\d+/){Time.at($&.to_i)}'
> Fri Mar 18 10:58:31 JST 2005

Hard to do much here, but here's two characters:

> % echo 1111111111 |ruby -pe 'sub(/^\d+/){Time.at$_.to_i}'