210 likes | 278 Views
LING/C SC/PSYC 438/538. Lecture 5 Sandiway Fong. Today’s Topics. File input/output open, <> References Perl modules Homework 2: due next Monday by midnight email: sandiway@email.arizona.edu one PDF file subject: 438/538 homework 2. File I/O. Step 1: call open().
E N D
LING/C SC/PSYC 438/538 Lecture 5 Sandiway Fong
Today’s Topics • File input/output • open, <> • References • Perl modules • Homework 2: due next Monday by midnight • email: sandiway@email.arizona.edu • one PDF file • subject: 438/538 homework 2
File I/O • Step 1: call open() Files: must be opened for reading “<“ or writing “>” (overwrite or append mode “>>”) Shell syntax: I/Oredirection “<“ “>” Opening a file creates a file handle (Perl variable) – not to be confused with filename Supply the file handle for read/write
File I/O • Step 2: use the <> operator: $in is the file handle instantiated by the open() call
File I/O • Line by line: open($txtfile, $ARGV[0]) or die "$ARGV[0] not found!\n"; while ($line = <$txtfile>) { print "$line"; } close($txtfile) • the command $line = <$txtfile> inside the condition reads in a line from the file • referenced by the file handle $txtfile • and places that line into the variable $line (including the newline at the end of the line) • At the end of the file, $line is just an empty string (equivalent to false). • the filename is the first parameter to the perl program (arguments go in @ARGV).
More complex data structures • Arrays and hashes may only contain scalars • Question: How to accomplish nesting, i.e. put non-scalars inside? • Answer: use references (pointers), which happen to be scalars • http://perldoc.perl.org/perlreftut.html (actually a reference is just an unsigned number: computer address)
References Remember bracketing when initializing: ( ) List – can be used for both arrays and hashes [] Reference to an array {} Reference to a hash • Two ways to make a reference:
References • Example: array of arrays Note: uses Make Rule 2 • Let’s figure out what the following mean: de-reference
References • Looping (using for/foreach) with array/hash references: Be careful! $aref->[3] and $aref[3] are different
References • Code: $a = [1, 2, 3, 4, 5]; print $a+1 • What happens here?
References • Looping (using for/foreach) with array/hash references: Be careful! $href->{‘red’} vs. $href{‘red’} are different.
Experiment • Unicode encoding (utf-8)
Experiment • Note: open pragma most general solution
Perl Modules • CPAN: Comprehensive Perl Archive Network terminal command • sudocpanmUnicode::CaseFold
cpanm • Ubuntu: Ubuntu: sudo apt-get cpanminus
cpanm • OSX: assume command line tools have been installed • xcode-select --install • uses program curl (cURL) • a command line tool for getting or sending files using URL syntax bash-3.2$ which cpanm bash-3.curl -L http://cpanmin.us | perl - --sudo App::cpanminus % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 303 0 303 0 0 56 0 --:--:-- 0:00:05 --:--:-- 1553 100 262k 100 262k 0 0 22916 0 0:00:11 0:00:11 --:--:-- 64374 --> Working on App::cpanminus Fetching http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7000.tar.gz ... OK Configuring App-cpanminus-1.7000 ... OK Building and testing App-cpanminus-1.7000 ... Password: OK Successfully installed App-cpanminus-1.7000 1 distribution installed bash-3.2$ which cpanm /usr/local/bin/cpanm
Homework 2 Question 1 (10pts) • Create a file data.txt(example): • Love for the the Bronx Bombers bubbled up in the absence of some local franchise. • On on on the table, we have some eggs. • I have home sharing turned on, on both my computer and my apple tv. • Write a Perl program that detects repeated words (many spell check/grammar programs can do this) • Your program should read in data.txt and print a message stating the line number, the repeated word and its position if one exists. Example output: • perlrepeated.perldata.txt • Line 1: word 3, “the” repeated 2 times • Line 2: word 1, “on” repeated 3 times • Submit your program and examples of its output Note: case
Homework 2 • Useful functions: chomp vs. chop split a string into words Note: multiple spaces ok with “ “ version
Homework 2 • Question 2: describe how a repeated word program could stop flagging legitimate examples of repeated words in a sentence • Examples: • I wish that that question had an answer • Because he had had too many beers already, he skipped the Friday office happy hour
Homework 2 • Microsoft Word: