SlideShare a Scribd company logo
Generated by Foxit PDF Creator © Foxit Software
                                         http://www.foxitsoftware.com For evaluation only.




                                Basic Programming in Ruby

Today’s Topics: [whirlwind overview]
• Introduction
• Fundamental Ruby data types, “operators”, methods
• Outputting text
     • print, puts, inspect
• Flow control
     • loops & iterators
     • conditionals
• Basic I/O
     • standard streams & file streams
     • reading & writing
• Intro to regular expression syntax
     • matching
     • substituting
• Writing custom methods (& classes)
Generated by Foxit PDF Creator © Foxit Software
                                                        http://www.foxitsoftware.com For evaluation only.




                                            Ruby Data Types

Ruby has essentially one data type: Objects that respond to messages (“methods”)
    • all data is an Object
    • variables are named locations that store Objects.
Let’s consider the classical “primitive” data types:
    • Numeric: Fixnum (42) and Float (42.42, 4.242e1)

    • Boolean: true and false
         • logically: nil & false are treated as “false”, all other objects are considered “true”

    • String (text)
         • interpolated: “t#{52.2 * 45}n”Hi Mom””
         • non-interpolatedt#{5*7}’
    • Range
         • end-inclusive, a.k.a. “fully closed range”: 2..19
         • right-end-exclusive, a.k.a. “half-open”: 2…19
Generated by Foxit PDF Creator © Foxit Software
                                                     http://www.foxitsoftware.com For evaluation only.




                      Ruby Data Types, “operators”, Methods

Key/special variables (predefined, part of language) :
    • nil (the no-Object; NULL, undef, none)
          • technically an instance (object) of the class NilClass

    • self (the current Object ; important later)


What about the standard bunch of operators?
    • sure, but keep in mind these are all actually methods
    • +, -, *, /, **
    • <, >, <=, >=, ==, !=, <=>
    • nil?()
    • Other important methods many objects respond to:
          • to_s() ; to_i() ; to_f() ; size() ; empty?()
          • reverse() ; reverse! ; include? ; is_a?
Generated by Foxit PDF Creator © Foxit Software
                                                             http://www.foxitsoftware.com For evaluation only.




                       More Complex, But Standard Data Types

Arrays
    • anArr = Array.new() ; anArr = []
    • 0-based indexes to access items in an Array using [] method à anArr[2] = “glycine” ; aA = anArr[2]
    • objects of different classes can be stored within the Array
    • responds to push(), pop(), shift(), unshift() methods
          • for adding & removing things from the end or the front of Arrays
    • Array merging and subtraction via + and –
    • Deleting items from Arrays via delete() & delete_at()
    • Looking for items via include?
          • slow for huge arrays obviously, or if we use repeatedly on moderate sized ones

Hashes
    • Look up items based on a key ß fast lookup
    • aHash = Hash.new() ; aHash = {} ; aHash = Hash.new {|hh,kk| hh[kk] = [] }
    • key-based access to items using [] method à aHash[“pros1”] = “chr14” ; chrom = aHash[“pros1”]
    • key can be any object, as can the stored value
    • check if there is already something within the array: key?(“pros2”)
    • number of items stored: size()
Generated by Foxit PDF Creator © Foxit Software
                                                               http://www.foxitsoftware.com For evaluation only.




                                                   Flow control: loops

Loops:
     • boringly simple and often not what you need
     • loop { }
     • while()
     • break keyword to end loop prematurely

Iteration:
     • more useful…very common to want to iterate over a set of things
     • iterator methods take blocks…a piece of code the iterator will call at each iteration, passing the
     current item to your piece of code
             • like a function pointer in C, function name callback in Javascript, anonymous methods in Java, etc

     • times {} ; upto {}
     • each {} ; each_key {}
     • each {} probably the most useful… Arrays, Strings, File (IO), so many Classes support it
     • look for specialty each_XXX {} methods like: each_byte{}, each_index {}, etc


Result: no need for weird constructs like for(ii=0; ii<arr.size;ii++) nor foreach…in… nor do-while
Generated by Foxit PDF Creator © Foxit Software
                                                          http://www.foxitsoftware.com For evaluation only.




                                        Flow control: conditionals

Conditional Expressions:
     • evaluate to true or to false
     • usually involve a simple method call or a comparison
          • nil? ; empty? ; include?
          • == ; != ; > ; <= ; … etc…
     • combine conditional expressions with boolean logic operators: or , and , || , &&, !, not
     • remember: only nil and false evaluate to false, all other objects are true
          • 0, “0”, “” evaluate to true (unlike in some other languages where they double as false values)



Use conditionals for flow control:
     • while() …   end

     • if() … elsif() … else … end
     • unless() … else … end
     • single line if() and unless()
     • Read about case statements, Ruby’s switch statement (a special form of if-elsif-else statements)
Generated by Foxit PDF Creator © Foxit Software
                                                               http://www.foxitsoftware.com For evaluation only.




                                       Basic I/O: Standard Streams

Reading & Writing: let’s discuss the 3 standard I/O streams first:


Generally, 3 standard streams available to all programs: stdout, stderr, stdin
     • most often, stdoutàscreen, stderràscreen, stdinßdata redirected into program
            • stdout and stderr sometimes redirected to files when running programs
     • in Ruby, these I/O streams explicitly available via $stdout, $stderr, $stdin
     • puts() ends up doing a $stdout.puts()
     • explicit $stderr.puts() calls can be useful for debugging, program progress updates, etc

Reading:
     • each {} ; each_line{} ß most useful (iteration again)
     • readline()

Writing:
     • we’ve been writing via puts(),       print() already…these Object methods write to the standard output
     IO stream e.g. $stdout.puts()
Generated by Foxit PDF Creator © Foxit Software
                                                           http://www.foxitsoftware.com For evaluation only.




                                     Basic I/O: Working With Files
File Objects:
     • open for reading à file = File.open(fileName)
     • open for writing à file = File.open(fileName, “w”) ßcreates a new file or wipes existing file out
     • open for appending à file = File.open(fileName, “a+”)
     • read() ; readline() ; each {} ; each_line {}
     • print() ; puts()
     • seek() ; rewind() ; pos()
Strings as IO:
     • what if we have some big String in memory and want to treat it as we would a File?
     • require ‘stringio’
     • strio = StringIO.new(str)
     • go crazy and use file methods mentioned above
     • newStr = strio.string() ß covert to regular String object
Interactive Programs:
     • generally avoid…when working with and producing big data files, you want to write things that can run
     without manual intervention
     • unless you are writing permanent tools for non-programmers to use (then also consider a GUI)
     • getc() ; gets() ; et alia
Generated by Foxit PDF Creator © Foxit Software
                                                          http://www.foxitsoftware.com For evaluation only.




                                      Regular Expressions Intro
Regular Expressions are like powerful patterns, applied against Strings
Very useful for dealing with text data!
Ruby’s regular expression syntax is like that of Perl, more or less. Also there is a pure object-
oriented syntax for more complex scenarios or for Java programmers to feel happy about.
Key pattern matching constructs:
     • . ß must match a single character
     • + ß must match one or more characters [ + is ‘one or more of preceding’ ]
     • * ß 0 or more characters match here [ * is ‘zero or more of preceding’ ]
     • ? ß 0 or 1 characters match here [ ? is ‘preceding may or may not be present’ ]
     • [;_-] ß match 1 of ; or _ or – (in this example)
     • [^;_-] ß match any 1 character except ; or _ or – (in this example)
     • [^;_-]+ ß match 1 or more of any character but ; or _ or – here
     • ^ ß match must start at beginning of a line [ $ anchors the end of a line ]
     • A ß match must start at beginning of whole string [ Z anchors at end of string ]
     • d ß match a digit [ D match any non-digit ]
     • w ß match a word character [ W match any non-word character ] [ word is alpha-num and _ ]
     • s ß match a whitespace character [ S match any non-whitespace character ]
     • foo|bar ß match foo or bar [ ‘match preceding or the following’ ]
Generated by Foxit PDF Creator © Foxit Software
                                                         http://www.foxitsoftware.com For evaluation only.




                                       Regular Expressions Intro
Backreferences:
     • () around any part of pattern will be captured for you to use later
     • /accNum=([^;]+)/
     • The text matched by each () is captured in a variable named $1, $2, $3, etc
     • If the pattern failed to match the string, then your backreference variable will have nil

Syntax: (apply regex against a variable storing a String object)
     • aString =~ /some([a-zA-z]+$/ ß returns index where matches or nil (nil is false…)
     • aString !~ /some([a-zA-z]+$/ ß assert String doesn’t match; returns true or false

Uses:
     • In conditionals [ if(line =~ /gene|exon/) then geneCount += 1 ; end ]
     • In String parsing
     • In String alteration (like s///g operation in Perl or sed)
           • gsub() ; gsub!()

Special Note:
     • Perl folks: where is tr/// ?
     • Right here: newStr = oldStr.tr(“aeiou”, “UOIEA”)
Generated by Foxit PDF Creator © Foxit Software
                                              http://www.foxitsoftware.com For evaluation only.




                       Writing and Running Ruby Programs
Begin your Ruby code file with this line (in Unix/Linux/OSX command line):
    #!/usr/bin/env ruby

Save your Ruby code file with “.rb” extension
Run your Ruby program like this on the command line:
    ruby <yourRubyFile.rb>

Or make file executable (Unix/Linux/OSX) via chmod +x <yourRubyFile.rb> then:
    ./<yourRubyFile.rb>


Comment your Ruby code using “#” character
    • Everything after the # is a comment and is ignored


Download and install Ruby here:
    http://www.ruby-lang.org
Generated by Foxit PDF Creator © Foxit Software
                                                             http://www.foxitsoftware.com For evaluation only.




                                    Basic Programming in Ruby

More Help:
1.   Try Ruby http://tryruby.hobix.com/
2.   Learning Ruby http://www.math.umd.edu/~dcarrera/ruby/0.3/
3.   Ruby Basic Tutorial http://www.troubleshooters.com/codecorn/ruby/basictutorial.htm
4.   RubyLearning.com http://rubylearning.com/
5.   Ruby-Doc.org http://www.ruby-doc.org/
     •    Useful for looking up built-in classes & methods
     •    E.g. In Google: “rubydoc String”

6.   Ruby for Perl Programmers http://migo.sixbit.org/papers/Introduction_to_Ruby/slide-index.html

More Related Content

PPTX
Code for Startup MVP (Ruby on Rails) Session 2
PPTX
A brief tour of modern Java
PDF
PDF in Smalltalk
PPT
Python first day
PPT
Python first day
PDF
Effective Scala (JavaDay Riga 2013)
PDF
Why hadoop map reduce needs scala, an introduction to scoobi and scalding
PPTX
Rebuilding Solr 6 examples - layer by layer (LuceneSolrRevolution 2016)
Code for Startup MVP (Ruby on Rails) Session 2
A brief tour of modern Java
PDF in Smalltalk
Python first day
Python first day
Effective Scala (JavaDay Riga 2013)
Why hadoop map reduce needs scala, an introduction to scoobi and scalding
Rebuilding Solr 6 examples - layer by layer (LuceneSolrRevolution 2016)

What's hot (19)

ODP
What's With The 1S And 0S? Making Sense Of Binary Data At Scale With Tika And...
PDF
code4lib 2011 preconference: What's New in Solr (since 1.4.1)
PPTX
ShEx vs SHACL
PPTX
SHACL by example
PDF
Neo4j Introduction (Basics, Cypher, RDBMS to GRAPH)
PDF
Rapid Prototyping with Solr
PPTX
ShEx by Example
PDF
Apache AVRO (Boston HUG, Jan 19, 2010)
PPTX
RDF validation tutorial
PPTX
10 Sets of Best Practices for Java 8
PDF
Lucene for Solr Developers
PPTX
Jena Programming
PDF
Swift Basics
PPTX
Data shapes-test-suite
PDF
Java 8 ​and ​Best Practices
PPTX
Towards an RDF Validation Language based on Regular Expression Derivatives
PDF
Json Rpc Proxy Generation With Php
PDF
Neural Architectures for Named Entity Recognition
PDF
From DOT to Dotty
What's With The 1S And 0S? Making Sense Of Binary Data At Scale With Tika And...
code4lib 2011 preconference: What's New in Solr (since 1.4.1)
ShEx vs SHACL
SHACL by example
Neo4j Introduction (Basics, Cypher, RDBMS to GRAPH)
Rapid Prototyping with Solr
ShEx by Example
Apache AVRO (Boston HUG, Jan 19, 2010)
RDF validation tutorial
10 Sets of Best Practices for Java 8
Lucene for Solr Developers
Jena Programming
Swift Basics
Data shapes-test-suite
Java 8 ​and ​Best Practices
Towards an RDF Validation Language based on Regular Expression Derivatives
Json Rpc Proxy Generation With Php
Neural Architectures for Named Entity Recognition
From DOT to Dotty
Ad

Similar to Ruby1_full (20)

PPT
MIND sweeping introduction to PHP
PPT
PPT
PPT
Php introduction with history of php
PPT
php fundamental
PPTX
PHP Basics
PPT
rtwerewr
PPT
PHP - Introduction to PHP
PPT
Php classes in mumbai
PPT
PDF
The Scheme Language -- Using it on the iPhone
PDF
web programming UNIT VIII python by Bhavsingh Maloth
KEY
Erlang/OTP for Rubyists
PPTX
Python assignment help
PDF
Tutorial on-python-programming
PDF
JavaScript Good Practices
MIND sweeping introduction to PHP
Php introduction with history of php
php fundamental
PHP Basics
rtwerewr
PHP - Introduction to PHP
Php classes in mumbai
The Scheme Language -- Using it on the iPhone
web programming UNIT VIII python by Bhavsingh Maloth
Erlang/OTP for Rubyists
Python assignment help
Tutorial on-python-programming
JavaScript Good Practices
Ad

More from tutorialsruby (20)

PDF
&lt;img src="../i/r_14.png" />
PDF
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
PDF
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
PDF
&lt;img src="../i/r_14.png" />
PDF
&lt;img src="../i/r_14.png" />
PDF
Standardization and Knowledge Transfer – INS0
PDF
xhtml_basics
PDF
xhtml_basics
PDF
xhtml-documentation
PDF
xhtml-documentation
PDF
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
PDF
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
PDF
HowTo_CSS
PDF
HowTo_CSS
PDF
BloggingWithStyle_2008
PDF
BloggingWithStyle_2008
PDF
cascadingstylesheets
PDF
cascadingstylesheets
&lt;img src="../i/r_14.png" />
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />
Standardization and Knowledge Transfer – INS0
xhtml_basics
xhtml_basics
xhtml-documentation
xhtml-documentation
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
HowTo_CSS
HowTo_CSS
BloggingWithStyle_2008
BloggingWithStyle_2008
cascadingstylesheets
cascadingstylesheets

Recently uploaded (20)

PPTX
sap open course for s4hana steps from ECC to s4
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Electronic commerce courselecture one. Pdf
PDF
KodekX | Application Modernization Development
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Approach and Philosophy of On baking technology
PPTX
Cloud computing and distributed systems.
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPT
Teaching material agriculture food technology
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
DOCX
The AUB Centre for AI in Media Proposal.docx
PPTX
Spectroscopy.pptx food analysis technology
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
sap open course for s4hana steps from ECC to s4
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
MIND Revenue Release Quarter 2 2025 Press Release
Electronic commerce courselecture one. Pdf
KodekX | Application Modernization Development
Agricultural_Statistics_at_a_Glance_2022_0.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Approach and Philosophy of On baking technology
Cloud computing and distributed systems.
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Teaching material agriculture food technology
20250228 LYD VKU AI Blended-Learning.pptx
Understanding_Digital_Forensics_Presentation.pptx
Digital-Transformation-Roadmap-for-Companies.pptx
The Rise and Fall of 3GPP – Time for a Sabbatical?
The AUB Centre for AI in Media Proposal.docx
Spectroscopy.pptx food analysis technology
Advanced methodologies resolving dimensionality complications for autism neur...

Ruby1_full

  • 1. Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Basic Programming in Ruby Today’s Topics: [whirlwind overview] • Introduction • Fundamental Ruby data types, “operators”, methods • Outputting text • print, puts, inspect • Flow control • loops & iterators • conditionals • Basic I/O • standard streams & file streams • reading & writing • Intro to regular expression syntax • matching • substituting • Writing custom methods (& classes)
  • 2. Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Ruby Data Types Ruby has essentially one data type: Objects that respond to messages (“methods”) • all data is an Object • variables are named locations that store Objects. Let’s consider the classical “primitive” data types: • Numeric: Fixnum (42) and Float (42.42, 4.242e1) • Boolean: true and false • logically: nil & false are treated as “false”, all other objects are considered “true” • String (text) • interpolated: “t#{52.2 * 45}n”Hi Mom”” • non-interpolatedt#{5*7}’ • Range • end-inclusive, a.k.a. “fully closed range”: 2..19 • right-end-exclusive, a.k.a. “half-open”: 2…19
  • 3. Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Ruby Data Types, “operators”, Methods Key/special variables (predefined, part of language) : • nil (the no-Object; NULL, undef, none) • technically an instance (object) of the class NilClass • self (the current Object ; important later) What about the standard bunch of operators? • sure, but keep in mind these are all actually methods • +, -, *, /, ** • <, >, <=, >=, ==, !=, <=> • nil?() • Other important methods many objects respond to: • to_s() ; to_i() ; to_f() ; size() ; empty?() • reverse() ; reverse! ; include? ; is_a?
  • 4. Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. More Complex, But Standard Data Types Arrays • anArr = Array.new() ; anArr = [] • 0-based indexes to access items in an Array using [] method à anArr[2] = “glycine” ; aA = anArr[2] • objects of different classes can be stored within the Array • responds to push(), pop(), shift(), unshift() methods • for adding & removing things from the end or the front of Arrays • Array merging and subtraction via + and – • Deleting items from Arrays via delete() & delete_at() • Looking for items via include? • slow for huge arrays obviously, or if we use repeatedly on moderate sized ones Hashes • Look up items based on a key ß fast lookup • aHash = Hash.new() ; aHash = {} ; aHash = Hash.new {|hh,kk| hh[kk] = [] } • key-based access to items using [] method à aHash[“pros1”] = “chr14” ; chrom = aHash[“pros1”] • key can be any object, as can the stored value • check if there is already something within the array: key?(“pros2”) • number of items stored: size()
  • 5. Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Flow control: loops Loops: • boringly simple and often not what you need • loop { } • while() • break keyword to end loop prematurely Iteration: • more useful…very common to want to iterate over a set of things • iterator methods take blocks…a piece of code the iterator will call at each iteration, passing the current item to your piece of code • like a function pointer in C, function name callback in Javascript, anonymous methods in Java, etc • times {} ; upto {} • each {} ; each_key {} • each {} probably the most useful… Arrays, Strings, File (IO), so many Classes support it • look for specialty each_XXX {} methods like: each_byte{}, each_index {}, etc Result: no need for weird constructs like for(ii=0; ii<arr.size;ii++) nor foreach…in… nor do-while
  • 6. Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Flow control: conditionals Conditional Expressions: • evaluate to true or to false • usually involve a simple method call or a comparison • nil? ; empty? ; include? • == ; != ; > ; <= ; … etc… • combine conditional expressions with boolean logic operators: or , and , || , &&, !, not • remember: only nil and false evaluate to false, all other objects are true • 0, “0”, “” evaluate to true (unlike in some other languages where they double as false values) Use conditionals for flow control: • while() … end • if() … elsif() … else … end • unless() … else … end • single line if() and unless() • Read about case statements, Ruby’s switch statement (a special form of if-elsif-else statements)
  • 7. Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Basic I/O: Standard Streams Reading & Writing: let’s discuss the 3 standard I/O streams first: Generally, 3 standard streams available to all programs: stdout, stderr, stdin • most often, stdoutàscreen, stderràscreen, stdinßdata redirected into program • stdout and stderr sometimes redirected to files when running programs • in Ruby, these I/O streams explicitly available via $stdout, $stderr, $stdin • puts() ends up doing a $stdout.puts() • explicit $stderr.puts() calls can be useful for debugging, program progress updates, etc Reading: • each {} ; each_line{} ß most useful (iteration again) • readline() Writing: • we’ve been writing via puts(), print() already…these Object methods write to the standard output IO stream e.g. $stdout.puts()
  • 8. Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Basic I/O: Working With Files File Objects: • open for reading à file = File.open(fileName) • open for writing à file = File.open(fileName, “w”) ßcreates a new file or wipes existing file out • open for appending à file = File.open(fileName, “a+”) • read() ; readline() ; each {} ; each_line {} • print() ; puts() • seek() ; rewind() ; pos() Strings as IO: • what if we have some big String in memory and want to treat it as we would a File? • require ‘stringio’ • strio = StringIO.new(str) • go crazy and use file methods mentioned above • newStr = strio.string() ß covert to regular String object Interactive Programs: • generally avoid…when working with and producing big data files, you want to write things that can run without manual intervention • unless you are writing permanent tools for non-programmers to use (then also consider a GUI) • getc() ; gets() ; et alia
  • 9. Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Regular Expressions Intro Regular Expressions are like powerful patterns, applied against Strings Very useful for dealing with text data! Ruby’s regular expression syntax is like that of Perl, more or less. Also there is a pure object- oriented syntax for more complex scenarios or for Java programmers to feel happy about. Key pattern matching constructs: • . ß must match a single character • + ß must match one or more characters [ + is ‘one or more of preceding’ ] • * ß 0 or more characters match here [ * is ‘zero or more of preceding’ ] • ? ß 0 or 1 characters match here [ ? is ‘preceding may or may not be present’ ] • [;_-] ß match 1 of ; or _ or – (in this example) • [^;_-] ß match any 1 character except ; or _ or – (in this example) • [^;_-]+ ß match 1 or more of any character but ; or _ or – here • ^ ß match must start at beginning of a line [ $ anchors the end of a line ] • A ß match must start at beginning of whole string [ Z anchors at end of string ] • d ß match a digit [ D match any non-digit ] • w ß match a word character [ W match any non-word character ] [ word is alpha-num and _ ] • s ß match a whitespace character [ S match any non-whitespace character ] • foo|bar ß match foo or bar [ ‘match preceding or the following’ ]
  • 10. Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Regular Expressions Intro Backreferences: • () around any part of pattern will be captured for you to use later • /accNum=([^;]+)/ • The text matched by each () is captured in a variable named $1, $2, $3, etc • If the pattern failed to match the string, then your backreference variable will have nil Syntax: (apply regex against a variable storing a String object) • aString =~ /some([a-zA-z]+$/ ß returns index where matches or nil (nil is false…) • aString !~ /some([a-zA-z]+$/ ß assert String doesn’t match; returns true or false Uses: • In conditionals [ if(line =~ /gene|exon/) then geneCount += 1 ; end ] • In String parsing • In String alteration (like s///g operation in Perl or sed) • gsub() ; gsub!() Special Note: • Perl folks: where is tr/// ? • Right here: newStr = oldStr.tr(“aeiou”, “UOIEA”)
  • 11. Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Writing and Running Ruby Programs Begin your Ruby code file with this line (in Unix/Linux/OSX command line): #!/usr/bin/env ruby Save your Ruby code file with “.rb” extension Run your Ruby program like this on the command line: ruby <yourRubyFile.rb> Or make file executable (Unix/Linux/OSX) via chmod +x <yourRubyFile.rb> then: ./<yourRubyFile.rb> Comment your Ruby code using “#” character • Everything after the # is a comment and is ignored Download and install Ruby here: http://www.ruby-lang.org
  • 12. Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Basic Programming in Ruby More Help: 1. Try Ruby http://tryruby.hobix.com/ 2. Learning Ruby http://www.math.umd.edu/~dcarrera/ruby/0.3/ 3. Ruby Basic Tutorial http://www.troubleshooters.com/codecorn/ruby/basictutorial.htm 4. RubyLearning.com http://rubylearning.com/ 5. Ruby-Doc.org http://www.ruby-doc.org/ • Useful for looking up built-in classes & methods • E.g. In Google: “rubydoc String” 6. Ruby for Perl Programmers http://migo.sixbit.org/papers/Introduction_to_Ruby/slide-index.html