Time of Update: 2018-12-03
-- Start在需要的時候我們可以向 Perl 指令碼傳遞參數,Perl 會自動將所有的參數放到數組 @ARGV 中, 下面是一個簡單的例子。#!/usr/bin/perluse strict;if(@ARGV != 1) {# die 函數用來輸出錯誤資訊並退出程式# $0 中儲存的是指令碼的名字die "Usage: $0 <name>";}my ($name) = @ARGV;print "Welcome $name!\n";Unix 的 cat
Time of Update: 2018-12-03
-- Start在 Linux 中,我們通過大於符號(>) 和小於符號(<) 來重新導向輸入和輸出到一個檔案中。在 Perl 中,我們也可以很容易的從一個檔案中讀取資料或將資料寫入一個檔案中。#!/usr/bin/perluse strict;my $file1 = "c:/a.txt";my $file2 = "c:/b.txt";# 開啟檔案open IN, "< $file1" || die "$!"; # 以唯讀方式開啟 $file1open OUT, ">
Time of Update: 2018-12-03
-- Start標準輸出通常,所謂的標準輸入指的是鍵盤,標準輸出指的是螢幕。我們已經知道了如何通過 print 函數來列印訊息到標準輸出,事實上,那是簡寫,完整的寫法如下:#!/usr/bin/perl# 標準輸出print "message\n";print STDOUT "message\n";# 標準錯誤輸出print STDERR "error\n";標準輸入:一次讀入一行下面的例子示範了如何從標準輸入中讀取輸入。#!/usr/bin/perlprint "你的姓名?\n";$name
Time of Update: 2018-12-03
-- Start我們接著上節的例子,你有一個檔案,其中包括兩列,第一列是姓名,第二列是社會安全號碼,中間用逗號分隔。不同的是,姓名和社會安全號碼都用雙引號引起來。像下面這樣:"尚波","1234567890"假設你想尋找姓名這一列,用下面的運算式:^".*"然而結果並非像我們期望的那樣匹配 "尚波",而是匹配了整行 "尚波","1234567890",這不是我們想要的。我們把星號(*)這種匹配方式稱為貪婪(greedy)匹配。我們到底該怎麼辦呢? 試一試下面的運算式吧。^".*?"呵呵,怎麼樣?
Time of Update: 2018-12-03
-- Start我們都知道對象的私人變數只有它自己能訪問, 其他任何對象都不能訪問, 然而如果你看 String 類的原始碼, 你會發現如下的代碼.private final char value[];private final int offset;private final int count;public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof
Time of Update: 2018-12-03
-- Start任何程式都需要向使用者顯示訊息, 無論是成功的訊息或者是失敗的訊息. 通常我們通過字串拼接來構造訊息, 下面是一個簡單的例子.public static void main(String[] args) throws Exception {Scanner in = new Scanner(System.in);System.out.print("What is your name? ");String name = in.nextLine();System.out.print("
Time of Update: 2018-12-03
-- Start我們已經知道了在正常情況下點號(.)是不能匹配分行符號的,為了使點號能夠匹配分行符號,我們不得不使用工具提供的單行匹配模式。令人高興的是,我們並非只有一種選擇,通常排除型字元組是可以匹配分行符號的,我們可以在需要點號匹配分行符號的時候採用排除型字元組來替代。#!/usr/bin/perlmy $testText = "I lovereg\nular expressions.";if($testText =~ m/reg[^ ]ular/) {print "finds the
Time of Update: 2018-12-03
-- Startrequire如果我們有一個 date.pl,其中包含了一些關於日期操作的函數,如下:#!/usr/bin/perlsub getToday {my (undef,undef,undef,$mday,$mon,$year) = localtime(time);return sprintf("%04d%02d%02d", $year + 1900, $mon +1, $mday);}# 必須返回一個布爾型的真值,否則 require 時會報錯return
Time of Update: 2018-12-03
-- Start其實, 所謂的編碼就是字元和數字之間的映射, 我們把這個數字稱為代碼點或碼位(code point), 碼位採用16進位加上首碼U+來表示, 如:A的碼位是U+0041.20世紀80年代, 人們在設計Unicode編碼的時候認為, 2個位元組16位65536個碼位足以將世界上所有語言的字元進行編碼, 碼位從 U+0000 到 U+FFFF.隨著時間的發展, 在加入大量的中文, 日文和韓文之後, 不可避免的事情發生了, 65536個碼位已經不能滿足要求了,
Time of Update: 2018-12-03
-- Start在全域匹配模式 一節中我們瞭解到, 支援Regex的工具通常都支援以下幾種模式。不區分大小寫匹配模式注釋模式單行模式(點號通配模式)多行模式(增強行錨點模式)文字文字模式但是它們的作用範圍都是整個運算式,事實上我們還可以指定局部匹配模式,也就是說它們只對部分子運算式起作用。我們來看如何指定局部匹配模式。不區分大小寫匹配模式 (?i:...)注釋模式 (?x:..
Time of Update: 2018-12-03
-- Start檔案測試有時候我們需要判斷某個檔案是否存在,很簡單,使用 -e 即可,下面是一個簡單例子。#!/usr/bin/perlprint "請輸入路徑和檔案名稱:\n";chomp (my $file = <STDIN>);if(! -e "$file") {print STDERR
Time of Update: 2018-12-03
-- Start不區分大小寫匹配模式我們在忽略大小寫匹配一節中介紹了如何在EmEditor中進行忽略大小寫匹配,下面我們看一下如何在 Perl 和 Java中進行忽略大小寫匹配。Perl 使用 /i 修飾符,Java 使用 Pattern.CASE_INSENSITIVE。#!/usr/bin/perlmy $testText = "I love regular expressions.";if($testText =~ m/REGULAR/i) {print "finds the word."
Time of Update: 2018-12-03
-- StartPerl 是一門指令碼語言,難免有時候我們需要叫用作業系統命令,我們可以使用system函數來執行系統命令,如果我們想捕獲系統命令的輸出結果,我們可以使用反引號(``),如下是一個簡單的例子。#!/usr/bin/perl# 調用 date 命令system "date";# 捕獲 date 輸出my $now = `date`;print "The time is $now"; -- 更多參見:Perl 精萃-- 聲 明:轉載請註明出處-- Last Updated on 20
Time of Update: 2018-12-03
-- Start什麼是 POSIX 呢? POSIX 是 Portable Operating System Interface (可移植作業系統介面) 的縮寫,它是一系列標準,確保作業系統之間的移植性。通常支援Regex的工具都支援下列 POSIX
Time of Update: 2018-12-03
-- StartPerl 中沒有專門的日期資料類型,我們可以通過以下三個函數來得到當前日期和時間。time -- 返回自 1970-01-01 00:00:00 的秒數。localtime -- 將秒數換算成本地時間gmtime -- 將秒數換算成GMT時間結合 time 和 localtime 函數,我們就可以得到目前時間,下面是一個簡單的例子。#!/usr/bin/perlmy ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
Time of Update: 2018-12-03
-- Start我們已經知道了什麼是字元組,為了使定義字元組更加優雅便利,Java 的字元組支援完整的集合運算(並、補、交),來看下面的例子。[a-d[m-p]] 並集 等同於[a-dm-p][a-z&&[def]] 交集 匹配d, e 或 f[a-z&&[^bc]] 補集 等同於[ad-z]--更多參見:Regex精萃-- 聲 明:轉載請註明出處-- Last Updated on 2012-05-10-- Written by ShangBo on 2012-
Time of Update: 2018-12-03
-- Start假設現在你有一些像下面這樣的數字,你想為它們從右至左每四位添加一個逗號,從而使它們可讀性更好,該怎麼辦呢?1234567890也許你覺得,下面的辦法可以解決問題:在 EmEditor 中Ctrl+H 調出Replace 對話方塊,在 Find 中輸入(\d\d\d\d),在 Replace With
Time of Update: 2018-12-03
-- Start什麼是格式化呢? 所謂的格式化是指套用一定的格式將數字,日期或訊息等轉換成字串, 或將具有一定格式的字串還原成數字或日期. 我們為什麼要格式化數字,日期和訊息呢? 主要是為了在顯示或列印的時候符合本機使用者的習慣. 本節我們主要關注如何格式化數字和貨幣.預定義格式不同國家和地區顯示數字和貨幣的方式是不同的, 顯然格式化數字或貨幣和本地的語言環境有密切關係. 利用 NumberFormat 類提供的方法,
Time of Update: 2018-12-03
-- Start我們先看一個例子.public class Test {public static void main(String[] args) throws Exception {print(new String[] { "a", "b" });}public static void print(String[] strs) {for (String str : strs) {System.out.print(str);}}}在 JDK 1.5 之前,
Time of Update: 2018-12-03
-- StartJDK 5.0 提供了增強for迴圈語句, 使得我們迭代數組和集合非常方便. 事實上, 任何類只要實現了 Iterable 介面, 那麼它就可以使用增強for迴圈語句來遍曆, 下面是一個簡單的例子.import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class Test {public static void main(String[] args) throws