Perl6 檔案相關內容

gaorongchao1990626發表於2015-12-31

Perl6 檔案相關內容

以下內容,主要來源於以下網頁的提取。
http://doc.perl6.org/type/IO
還有下面:
https://doc.perl6.org/language/io

昨天我們簡單說了’slurp’ 和’spurt’這兩個讀檔案和寫檔案的函式。
但是 Perl6 相關還有很多的相關函式。

標準輸出,和 Perl5 一樣。也就是需要手動加上換行符。

print "Hi there!\n";

say 函式

第一點是say可以自動在末尾加上換行符。
第二點是可以直接列印陣列和hash。
那肯定有人問了,print不是也可以列印嗎?那我們就看看他們的區別:

my @array = qw/1 2 53 31/;
print @array; # 結果:125331
say @array;   # 結果:[1 2 53 31]

my %hash = a=>1, b=>2, c=>3;
print %hash; # a       1c      3b      2
say %hash; # a => 1, b => 2, c => 3 

note 函式

note 和say差不多,不過他只會在標準錯誤輸出中列印他的結果。

if ("path/to/pirate/treasure".IO.e) {
say "Found pirate treasure!";
}
else {
note "Could not find pirate treasure.  Are you sure it exists?";
}

dd 函式

ddshi Data Dumper的簡版。

my $a = 42;
my %hash = "a" => 1, "b" => 2, "c" => 3;
dd %hash, $a;
# 結果
# Hash %hash = {:a(1), :b(2), :c(3)}
# Int $a = 42

prompt 函式

prompt是用來輸出一段文字,並且會等待使用者輸入點什麼東西,然後以Enter結束。
一下指令碼將你輸入的文字賦值給name

name,當然
name 是不帶著換行符的。

my $name = prompt("Hi, What's your name?");
say $name;

如果放到以前Perl5會怎麼做呢?

print "hello,what's your name\n";
my $name = <>;
print "your name is $name\n";

open 函式

檔案的讀寫模式

open 有幾種讀寫模式::r,:w,:a,:rw
:r 是隻讀模式,類似 perl5 中的’<’
:w 是隻寫模式,如果檔案不存在,就建立,如果存在就覆蓋。類似Perl5中的’>’;
a 是追加模式,如果檔案不存在就建立檔案,如果存在就在檔案的後面追加內容。類似Per5中的’>>’;
# 開啟一個控制程式碼,:r是隻讀模式,所以不能夠往下面的$fh中寫入檔案
my $fh=open("a.txt",:r);


# 檢視控制程式碼的的資訊
say $fh; # IO::Handle<a.txt>(opened, at octet 0))>


say $fh.get(); # 讀取檔案的第一行
say $fh.get(); # 讀取檔案的第二行
$fh.close; # 關閉控制程式碼

# 一行行的讀取整個檔案
$fh=open("a.txt",:r);
while (my $line = $fh.get())
{
    say $line;
}
$fh.close;
# 當然你也可以像以前一樣close $fh;

# 還可以這麼玩
for 'a.txt'.IO.lines -> $line {
    say $line;
}
# 當然你也可以把所有行存入一個陣列

檔案的編碼選項

# 二進位制方式開啟
open my $fh = open("a.txt",:bin);
# 選擇編碼的方式
# 預設是unicode
my $fh = open("a.txt", enc => "Unicode");
# utf8
my $fh = open("a.txt", enc => "utf8");
my $fh = open("a.txt", enc => "utf-8");
# latin1
my $fh = open("a.txt", enc => "latin1");

換行符

這個選項用來指明文字的EOL(end of line);
預設的是’\n’,’\r\n’,’\r’

# explicitly use CR-LF as EOL character
my $fh = open("a.txt", nl => "\r\n");)

chomp

在perl5 中我們都知道chomp($line);
可以去掉一行中的換行符,在這裡功能也一樣
預設是去掉的,當然你也可以設定為不去掉。

# do not remove newline characters from input
my $fh = open("path/to/file", chomp => False);
say $fh.get();     # returns line including newline char))

slurp 函式,檔案讀取

# 用slurp 一次性的讀取整個檔案到變數中
my $text_contents = slurp 'a.txt';
say $text_contents;
# 也可以這樣

寫入檔案

一行行寫

my $fh = open('b.txt',:w);
my @array = [1,2,4,32];
for @array -> $i {
    # 這兩種方式都可以
    $fh.print("$i\n");
    $fh.say($i);
}
$fh.close;

spurt 函式

簡單粗暴的方式

my @array = [1,2,4,32];
spurt 'c.txt',@array;
# spurt也有幾個引數
# :append 追加在檔案的後面
my @array = [1,2,4,32];
spurt 'c.txt',@array,:append;

shell 函式

執行系統命令

my @files=shell 'ls -ls';
say @files;
my $date = shell 'date';
say $date;

檔案和資料夾

say dir
say dir “/Documents”;
mkdir 建立資料夾
rmdir 刪除資料夾
IO.e checks if the directory/file exist.
IO.f checks if the path is a file.
IO.d checks if the path is a directory.

相關文章