perl的輸入與輸出

2021-08-01 03:21:43 字數 3492 閱讀 9300

讀取標準輸入():鍵盤輸入,回車分行,ctrl+c截止

例:while()

foreach()

簡單寫法,將輸入處理到結尾,不同的是while是取一行處理一行,foreach是全部取出之後再一行行處理。都是每一行作為一條資料,存在預設變數$_中。

鑽石操作符(<>):

例: while(<>)

它可以讀取乙個檔案(一行行讀取),每一行存在預設變數$_中,需要在執行的時候給出要操作的檔案。

在windows中的操作方法:開啟cmd,輸入:

perl程式.pl 處理檔案1 處理檔案2... (可以有更多要操作的檔案,如果不在當前目錄下,要把程式和處理檔案的絕對路徑寫下來)。

呼叫引數:

因為呼叫的檔案(注意是檔案,也就是cmd執行時要操作的那一串檔案)都是事先存放在@argv陣列中,所以如果改變了@argv,無論你呼叫什麼引數執行,只會執行你改變後的檔案,如在**中加入下面一行:

@argv = qw # f:/editplus/old/a.txtf:editplus/old/b.txt#

這樣,無論你執行是的引數是什麼,都會且只操作a.txt和b.txt

輸出到標準輸出(print):

① print "字串", n+m, "字串"; ——無論是字串,表示式,還是標量都可以一起輸出出來 ②

print @陣列名; —— 無間隔把陣列列印出來

print "@陣列名"; ——先把陣列變成字串,即以空格分隔成乙個字串,再輸出,因此這種有間隔

print "@陣列名\n"; —— 有換行符輸出 ③

print <>; ——輸出檔案內容,相當於unix下的cat

print sort <>; —— 排序輸出檔案內容

④ print的返回值是0或1,代表輸出是否成功,一般返回1

⑤print後面有括號的時候,像函式,那就是函式 例:

print (2+3)*4; 相當於

(print(2+3))*4,結果為4(因為print返回值為1)。用print時要記得它本身是有括號的,只是可以省略。

用printf格式化輸出:

可以像c語言一樣,用格式字串(如%s,%d,m等)

%g ——浮點數,整數,指數

%d ——十進位制整數(如果放入格式之前是小數,就會捨去小數,是捨去,不是四捨五入)

%s ——字串

%f ——浮點數(會四捨五入,可以指定小數點後的位數)

%% ——%

除了%f和%%都可以帶數字,表示數的長度,正數的話,多出的位數空格往左加,負數空格往右加,%f如果加數字,第乙個數字是長度,第二個數字是小數的位數,以「.」分開。

例:〇代表空格

printf "m\n",42; —— 〇〇〇〇42

printf "%-10s\n","abcde"; —— abcde〇〇〇〇〇

printf ".3f\n",6*7+2/3; —— 〇〇〇〇〇〇42.667

陣列和printf:

例: printf "the itemsare:\n".("s\n"x@items),@items;

第1個@items是陣列長度,就是要把s\n重複3次,第2個是陣列的值,這樣即使不確定陣列元素個數也能格式化輸出。

檔案控制代碼:

用來以固定格式輸入輸出。

命名規範:雖然沒有特殊要求,但盡量全大寫命名,避免與保留字衝突。

6個特殊檔案控制代碼:stdin、stdout、stderr、data、argv、argvout

建立檔案控制代碼(開啟):

檔案控制代碼只要開啟,就可以定義他的名字和執行方式,使用open。

例:open config, 'dion'; ——開啟,名為config檔案控制代碼,指向檔案dino

open config, ' —— 指定了它是讀取檔案

open bedrock, '>fred'; ——指定輸出到新檔案,如果是有這個檔案,清除原檔案

open log, '>>logfile'; ——以追加的方式寫入,沒有,新建檔案,如果存在,新增到最檔案後面

以二進位制的方式讀寫檔案控制代碼:

binmode 檔案控制代碼名, '編碼方式';

例: binmode stdout, ':encoding(utf-8)'; ——讀寫都能用

關閉檔案控制代碼:close檔案控制代碼名; (通常都會自動關閉)

用die處理致命錯誤:

一般處理檔案都會返回乙個狀態,非0代表不成功,只有0是成功,因此可以判斷它不是0的時候用die()方法終止程式。

例:if(! open log,'>>','logfile')

$!是錯誤資訊,後面還會自動加程式名和行號

用warn送出警告資訊:

和die差不多,只是不會終止。

自動檢測致命錯誤:

use autodie; 

——如果open失敗,自動啟動die

使用檔案控制代碼:

例: if(! open passwd,"/etc/passwd")

while()

改變預設的檔案輸出控制代碼:

如果不指定檔案控制代碼,預設輸出送到stdout。

改變:select檔案控制代碼; —— 用過還要設回預設stdout

例:select log;

$1 = 1;

select stdout;

print log "...";

這樣當前的預設檔案控制代碼在每次進行輸出後like重新整理緩衝區

重新開啟標準檔案控制代碼:

如果已經開啟了檔案控制代碼:

open stderr

用下面程式重新開啟,並將錯誤資訊寫到自己的檔案中:

if (! open stderr, ">> /home/barney/error.log")

如果開啟新的(或重新開啟)檔案控制代碼,就會關閉之前的,如果在重新開啟之前就出錯,錯誤資訊還是會到之前的地方,也就是說只有成功開啟後,才貴關閉之前的檔案控制代碼。

用say來輸出:

例: use 5.010; #這樣才能用

say "hello!";

say $變數名;

say "@array";

和print差不多,只是有自動換行

標量變數中的檔案控制代碼:

可以用標量變數做檔案控制代碼,而不用裸字。

例:open my $rocks_fh, '<', rocks.txt or die"could not openk rodks.txt:$!";

使用:while (<$rocks_fh>)

Perl 中的輸入與輸出

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

perl學習筆記 輸入與輸出

注意 1,會處理所有的輸入,直到所有輸入的結尾為止 一般在乙個程式中只有乙個 若出現多次則可能發生錯誤。2,呼叫引數 ar ar 是乙個裝著呼叫引數的陣列 1,讀取從鍵盤輸入的值 注意 只讀取鍵盤輸入的一行,到換行符結束 用chomp去掉換行符 若沒有賦值給變數,則預設存在 中 usr bin pe...

perl學習 5 輸入和輸出

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