From: Robert Klemme Date: 2004-09-24T01:09:35+09:00 Subject: Re: whitespace string only ------=_NextPart_000_0159_01C4A198.2ABFF2A0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit schrieb im Newsbeitrag news:Pine.LNX.4.60.0409230933170.2168@harp.ngdc.noaa.gov... > On Thu, 23 Sep 2004, Robert Klemme wrote: > > > > > "ts" schrieb im Newsbeitrag > > news:200409231451.i8NEphE08333@moulon.inra.fr... > >>>>>>> "A" == Ara T Howard writes: > >> > >> A> if s.strip.empty? > >> A> # the string is whitespace only > >> > >> svg% ruby -e 'a = " \000\000"; p "OK" if a.strip.empty?' > >> "OK" > >> svg% > >> > >> svg% ruby -e 'a = " \000\000 "; p "OK" if a.strip.empty?' > >> svg% > > > > Also I'd say the disadvantage of "a.strip.empty?" is that it creates a copy > > of the string (=> a new instance) which is generally slower than a simple > > regexp check. > > i assumed you were correct - but this is suprising: I have different results: user system total real rx =~ s 0.031000 0.000000 0.031000 ( 0.023000) rx =~ bs 0.016000 0.000000 0.016000 ( 0.022000) rx !~ s 0.031000 0.000000 0.031000 ( 0.025000) rx !~ bs 0.016000 0.000000 0.016000 ( 0.027000) RX1 =~ s 0.031000 0.000000 0.031000 ( 0.030000) RX1 =~ bs 0.031000 0.000000 0.031000 ( 0.030000) RX2 !~ s 0.047000 0.000000 0.047000 ( 0.039000) RX2 !~ bs 0.032000 0.000000 0.032000 ( 0.033000) s =~ rx 0.031000 0.000000 0.031000 ( 0.024000) bs =~ rx 0.015000 0.000000 0.015000 ( 0.024000) s !~ rx 0.032000 0.000000 0.032000 ( 0.026000) bs !~ rx 0.031000 0.000000 0.031000 ( 0.026000) s =~ RX1 0.031000 0.000000 0.031000 ( 0.031000) bs =~ RX1 0.031000 0.000000 0.031000 ( 0.031000) s !~ RX2 0.032000 0.000000 0.032000 ( 0.030000) bs !~ RX2 0.031000 0.000000 0.031000 ( 0.034000) s.strip.empty? 0.062000 0.000000 0.062000 ( 0.054000) bs.strip.empty? 0.047000 0.000000 0.047000 ( 0.050000) user system total real rx =~ s 0.032000 0.000000 0.032000 ( 0.022000) rx =~ bs 0.015000 0.000000 0.015000 ( 0.023000) rx !~ s 0.031000 0.000000 0.031000 ( 0.024000) rx !~ bs 0.016000 0.000000 0.016000 ( 0.025000) RX1 =~ s 0.031000 0.000000 0.031000 ( 0.030000) RX1 =~ bs 0.032000 0.000000 0.032000 ( 0.031000) RX2 !~ s 0.031000 0.000000 0.031000 ( 0.031000) RX2 !~ bs 0.031000 0.000000 0.031000 ( 0.032000) s =~ rx 0.031000 0.000000 0.031000 ( 0.025000) bs =~ rx 0.032000 0.000000 0.032000 ( 0.024000) s !~ rx 0.015000 0.000000 0.015000 ( 0.028000) bs !~ rx 0.031000 0.000000 0.031000 ( 0.026000) s =~ RX1 0.032000 0.000000 0.032000 ( 0.032000) bs =~ RX1 0.015000 0.000000 0.015000 ( 0.031000) s !~ RX2 0.032000 0.000000 0.032000 ( 0.031000) bs !~ RX2 0.031000 0.000000 0.031000 ( 0.033000) s.strip.empty? 0.062000 0.000000 0.062000 ( 0.051000) bs.strip.empty? 0.047000 0.000000 0.047000 ( 0.048000) 18:05:36 [ruby]: Regards robert ------=_NextPart_000_0159_01C4A198.2ABFF2A0 Content-Type: application/octet-stream; name="empty-test.rb" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="empty-test.rb" =0A= require 'benchmark'=0A= include Benchmark=0A= =0A= REP =3D 20000=0A= =0A= s =3D "42"=0A= bs =3D "42" * 10000=0A= =0A= RX1 =3D %r{\A\s*\z}=0A= RX2 =3D %r{\S}=0A= =0A= test =3D lambda do=0A= bm(20) do |b|=0A= b.report "rx =3D~ s" do=0A= REP.times { %r{\A\s*\z} =3D~ s }=0A= end=0A= =0A= b.report "rx =3D~ bs " do=0A= REP.times { %r{\A\s*\z} =3D~ bs }=0A= end=0A= =0A= b.report "rx !~ s" do=0A= REP.times { %r{\S} !~ s }=0A= end=0A= =0A= b.report "rx !~ bs " do=0A= REP.times { %r{\S} !~ bs }=0A= end=0A= =0A= =0A= b.report "RX1 =3D~ s" do=0A= REP.times { RX1 =3D~ s }=0A= end=0A= =0A= b.report "RX1 =3D~ bs " do=0A= REP.times { RX1 =3D~ bs }=0A= end=0A= =0A= b.report "RX2 !~ s" do=0A= REP.times { RX2 !~ s }=0A= end=0A= =0A= b.report "RX2 !~ bs " do=0A= REP.times { RX2 !~ bs }=0A= end=0A= =0A= =0A= b.report "s =3D~ rx" do=0A= REP.times { s !~ %r{\A\s*\z} }=0A= end=0A= =0A= b.report "bs =3D~ rx" do=0A= REP.times { bs =3D~ %r{\A\s*\z} }=0A= end=0A= =0A= b.report "s !~ rx" do=0A= REP.times { s !~ %r{\S} }=0A= end=0A= =0A= b.report "bs !~ rx" do=0A= REP.times { bs !~ %r{\S} }=0A= end=0A= =0A= b.report "s =3D~ RX1" do=0A= REP.times { s !~ RX1 }=0A= end=0A= =0A= b.report "bs =3D~ RX1" do=0A= REP.times { bs =3D~ RX1 }=0A= end=0A= =0A= b.report "s !~ RX2" do=0A= REP.times { s !~ RX2 }=0A= end=0A= =0A= b.report "bs !~ RX2" do=0A= REP.times { bs !~ RX2 }=0A= end=0A= =0A= =0A= b.report "s.strip.empty?" do=0A= REP.times { s.strip.empty? }=0A= end=0A= =0A= b.report "bs.strip.empty?" do=0A= REP.times { bs.strip.empty? }=0A= end=0A= end=0A= end=0A= =0A= test.call=0A= GC.disable=0A= test.call=0A= ------=_NextPart_000_0159_01C4A198.2ABFF2A0--