perl處理輸入和輸出 3

2021-08-30 17:16:26 字數 3797 閱讀 2549

宣告:本神奇的perl系列為劉興(

這段程式有幾處耐人尋味:

1、($name,$price)=split(',',$carmes);

($name,$price)表示乙個列表,列表可以理解為標量的有序集合,列表

儲存著資料的集合,而陣列可理解為儲存著列表的變數。列表可用用(元素

1,元素 2,元素 3,„..,元素 n)的方式表示。這句**完成乙個功能把等

號右邊分隔的每個元素賦值給左邊的列表,其中第 1 個元素給$name,第二

個元素給$price。

2、chomp($price);

$price難道會包括換行符?這是初學者最容易忽視的問題:檔案中每行只有2個元素,最後乙個元素(也就是第二個元素)的末尾包括換行符。

3、foreach $carmes()

從car檔案控制代碼中讀取資料給$carmes變數,每迴圈一次讀取一行,也可以如下書寫:

@mytext=;

foreach $carmes(@mytext)

4、say "$name:$price萬" if $price<15 and $price>10;

想必大家對if語句並不陌生,這是if的一種特殊用法,此語句的含義表示:如果$price<15並且$price>10,則執行say "$name:$price萬"語句。關於if,我們將在下一章詳述。

8.寫檔案

perl寫檔案的方式非常簡潔,使用以下2種形式:

say 檔案控制代碼 內容

print 檔案控制代碼 內容

把perl1-9的**稍加修改,將10萬到15萬之間車寫入另乙個csv格式檔案中。

#perl1-10.pl

use 5.010;

open car,'<.\perl1-9.csv';

open carout,'>.\perl1-10.txt';#以寫入方式開啟檔案perl1-10.txt

foreach $carmes()

close car;

9.帶格式輸出sprintf和printf

sprintf返回格式化後的字串,語法如下:

sprintf(「格式」,要格式的字串列表)

格式主要有以下幾種:

%%         百分號

%c           把給定的數字轉化為字元

%s           字串

%d           帶符號整數,十進位制

%u           無符號整數,十進位制

%o           無符號整數,八進位制

%x           無符號整數,十六進製制

%e           浮點數,科學計算法

%f            浮點數,用於固定十進位制計數

%g           浮點數,包括%e和%f

printf等同於以下語句:

print

sprintf(「格式」,要格式的字串列表);

我們使用sprintf,以元為單位輸出10萬到15萬的車的**列表。

#perl1-11.pl

use 5.010;

open car,'<.\perl1-9.csv';

foreach $carmes()

close car;

10.join

split和join函式在處理文字時經常使用,join的功能與split相反,它將列表中用逗號分隔的字串元素連線成單個字串,並返回這個字串,呼叫格式如下:

變數=join(分隔符,字串元素列表);

我們將perl1-11.pl修改一下,從perl1-9.csv中提取**在10萬到12萬之間的汽車,輸出為另乙個csv格式檔案。

#perl1-12.pl

use 5.010;

open car,'<.\perl1-9.csv';

open carout,'>.\perl1-11.csv』;以寫入方式開啟檔案perl1-11.csv

foreach $carmes()

close car;

close carout;

注意下面這個語句:

say carout  join(『,』,$name,sprintf(「%d」,$price*10000))

if $price<12 and $price>10;

因為csv格式每行元素之間以逗號分隔,所以使用逗號做為分隔符,將$name和格式轉換後的$price連線為單個字串輸出到carout檔案控制代碼中。

11.轉義字元表示

perl的主要轉義字元如下:

結 構 含 義   

\n 換行   

\r 回車   

\t 水平置表符   

\f 換頁符   

\b 退格   

\v 垂直置表符   

\a 響鈴   

\e esc   

\007 任一八進位制ascii值(這裡007表示bell)   

\x7f 任一十六進製制ascii值   

\cc 任一「控制」字元   

\\ 反斜槓   

\" 雙引號   

\l 下一字母小寫   

\l 以後所有字母小寫直到\e   

\u 下一字母大寫   

\u 以後所有字母大寫直到\e   

\e 結束\l和\u 

12.硬引用、指標

perl沒有像c語言一樣的可直接操縱記憶體的指標,但有類似於指標的的引用(也稱為硬引用)。引用是一種標量,含有其他型別資料的位址,可把它理解為乙個內容為位址值的變數。

在perl裡面使用「\」來建立引用;使用$解引用後,可使用引用指向的標量;使用@解引用,使用引用指向的陣列;使用%解引用後,使用引用指向的雜湊。這些使用方式具備修改權力,如:

#perl1-13.pl

$hello="hello";

$myhello=\$hello;

print "$myhello\n";#輸出$hello位址

print "$$myhello\n";#輸出$hello變數內容

$$myhello="hello!";#通過$myhello引用修改$hello變數的值

print "$hello\n";#輸出$hello變數內容

輸出結果如下:

scalar(0x182a6f4)

hello

hello!

這個程式中,$myhello存有$hello的位址,存有$hello變數的位址,通過$myhello能直接操作$hello,而不是操作$hello的複製版本。

符號引用(也稱為軟引用)操作符為$,相當於巨集替換,如以下**中, $$var相當於取$var的內容為變數名,完成巨集替換,最終表示$name。

$var="name";

$$var="張三";

print "$name\n";

輸出結果為

張三13.完成第乙個任務

這一章要結束了,輸入輸出基礎介紹完了,能完成本章開始時提出的任務了,將perl1-2.txt中的人員按城市分別存為幾個文字檔案,檔名是城市名。

#perl1-14.pl

use 5.010;

open people,'<.\perl1-2.txt';

$mytext=;

@peoples=split('#', $mytext);

foreach $peoplemes(@peoples)

close people;

請大家注意這個語句:open city,">>$city.txt";

開啟檔案的方式使用的是增加方式。根據perl的檔案處理原則,>>表示在原有內容上增加。

perl學習 5 輸入和輸出

行輸入操作在到達檔案的結尾時將返回 undef 在while迴圈的條件中不能使用chomp while defined line 在迴圈的內部,我們將看到每一行,一行接著一行,perl提供簡寫 while while defined 兩者是等同的 在進行深入討論前,我們要澄清一些事 這種簡寫只在特定...

perl的輸入與輸出

讀取標準輸入 鍵盤輸入,回車分行,ctrl c截止 例 while foreach 簡單寫法,將輸入處理到結尾,不同的是while是取一行處理一行,foreach是全部取出之後再一行行處理。都是每一行作為一條資料,存在預設變數 中。鑽石操作符 例 while 它可以讀取乙個檔案 一行行讀取 每一行存...

Perl 中的輸入與輸出

1.讀取標準輸入 簡單實用例子 example1 while defined line print here is the input line 如果要結束鍵盤輸入 用ctrl d 2.鑽石操作符 代表行輸入,只不過不是從鍵盤取得輸入 而是從使用者指定的位置讀取。讀入的內容可以在 看到。呼叫引數,鑽...