<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Vidul Nikolaev Petrov: Tag Ruby</title>
    <link>http://www.vidul.com/articles/tag/ruby</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>autovivification in Ruby?</title>
      <description>&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="constant"&gt;false&lt;/span&gt;
 &lt;span class="ident"&gt;x&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;true&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;

&lt;span class="ident"&gt;x&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;#NilClass&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Ruby declares the variable even if the assignment is not executed.&lt;/p&gt;</description>
      <pubDate>Sun, 13 Apr 2008 15:41:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:7ad8fb02-22cb-4c20-98b6-94fb7eac60cd</guid>
      <author>root</author>
      <link>http://www.vidul.com/articles/2008/04/13/autovivification-in-ruby</link>
      <category>Ruby</category>
      <category>Ruby</category>
    </item>
    <item>
      <title>Ruby one-liners (file manipulation)</title>
      <description>&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;
&lt;span class="comment"&gt;# number each line of a file&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;puts &amp;quot;#{$.}\t#{$_}&amp;quot;&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print all non-blank lines&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;$_.chomp.empty? and next&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# number and print all non-blank lines&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;$_.chomp.empty? or print $.,&amp;quot;\t&amp;quot;, $_&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# number and print each blank line&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;puts $. if $_.chomp.empty?&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# reverse order of lines (`tac` style)&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;e&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;puts File.open($&amp;lt;.filename).readlines.reverse&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print matched string from lines, matching the pattern&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;puts $_.scan(/^\w+/)&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="ident"&gt;etc&lt;/span&gt;&lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="ident"&gt;passwd&lt;/span&gt;

&lt;span class="comment"&gt;# triple space a file and reverse order of lines&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;e&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;$,=&amp;quot;\n\n\n&amp;quot;; puts File.readlines($&amp;lt;.filename).reverse.join&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print first line of a file (emulate 'head -1')&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;puts $_; break&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;$. == 1 or break&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print last line of a file (emulates 'tail -1')&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;END{puts $_}&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print last line number (emulates 'wc -l')&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;e&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;loop{gets or break}; puts $.&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print only lines that match a regular expression (emulates 'grep')&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;next if not /regex/&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print only lines that do not match a regular expression (emulates 'grep -v')&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;next if /regex/&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print section of file between two regular expressions, /^root/ and /^nobody/&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;puts $_ if /^root/../^nobody/&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print file and remove duplicate, consecutive lines from a file (emulates 'uniq')&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;$_.eql? $; or puts $_;$; = $_;&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print file except for blank lines&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;next if $_.chomp.empty?&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;next if /^\s*$/&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;next if $_.split(/\S+/).size &amp;lt; 2&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print file except for lines, starting with digit (unclear and inefficient)&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;next if (48..57).to_a.include?($_.split(//)[0][0])&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# delete all leading blank lines at top of file&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;$,=&amp;quot;$.&amp;quot; if not $_.chomp.empty?; $, or next&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print section of file from regex to end of file&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;$,=&amp;quot;$.&amp;quot; if /regex/; $, or next&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# delete leading and trailing whitespace from each line&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;$_.strip!.sub!(/$/, &amp;quot;\n&amp;quot;)&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;puts $_.strip! + $/&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# delete leading whitespace from the beginning of each line&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;puts $_.lstrip! || $_&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# convert DOS newlines (CR/LF) to Unix format (LF)&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;i&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;sub(/\r\n/, &amp;quot;\n&amp;quot;)&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 20 Jul 2007 11:11:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:8396e808-a634-4ed6-8530-8b0533a05d5e</guid>
      <author>root</author>
      <link>http://www.vidul.com/articles/2007/07/20/ruby-one-liners-file-manipulation</link>
      <category>programming</category>
      <category>Ruby</category>
      <category>oneliners</category>
      <category>Ruby</category>
    </item>
    <item>
      <title>nmap output cleaner</title>
      <description>&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="ident"&gt;arg&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;ARGV&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;join&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt; &lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;
&lt;span class="ident"&gt;arg&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;empty?&lt;/span&gt; &lt;span class="keyword"&gt;and&lt;/span&gt; &lt;span class="ident"&gt;exit&lt;/span&gt;

&lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="punct"&gt;%x[&lt;/span&gt;&lt;span class="string"&gt;nmap &lt;span class="expr"&gt;#{arg}&lt;/span&gt; 2&amp;gt;/dev/null&lt;/span&gt;&lt;span class="punct"&gt;].&lt;/span&gt;&lt;span class="ident"&gt;scan&lt;/span&gt;&lt;span class="punct"&gt;(/&lt;/span&gt;&lt;span class="regex"&gt;^&lt;span class="escape"&gt;\d&lt;/span&gt;+.+&lt;/span&gt;&lt;span class="punct"&gt;/)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 19 Jul 2007 21:21:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:43c56307-fcc7-4d0b-8a5b-f72fd815cc2f</guid>
      <author>root</author>
      <link>http://www.vidul.com/articles/2007/07/19/nmap-output-cleaner</link>
      <category>Ruby</category>
      <category>scripts</category>
      <category>Ruby</category>
    </item>
    <item>
      <title>Fibonacci numbers in Ruby and Perl</title>
      <description>&lt;p&gt;&lt;span style="color:#666;"&gt;#!/usr/bin/env ruby&lt;/span&gt;&lt;/p&gt;


&lt;code&gt;
x=1;loop{p$.+=x=$.-x}
&lt;/code&gt;

	&lt;p&gt;&lt;br /&gt;&lt;br /&gt;
&lt;span style="color:#666;"&gt;. #!/usr/bin/env perl&lt;/span&gt;&lt;/p&gt;


&lt;code&gt;
print$}+=$.=$}-$.||1while.1
&lt;/code&gt;</description>
      <pubDate>Thu, 19 Jul 2007 20:05:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:514f2ac8-2985-44d8-ad10-a2e080b2122e</guid>
      <author>root</author>
      <link>http://www.vidul.com/articles/2007/07/19/fibonacci-formula</link>
      <category>Ruby</category>
      <category>Perl</category>
    </item>
  </channel>
</rss>
