首先在IDEA上安裝 Perl插件:
1、文件 -設置- 插件 - 搜索Prel-然後在倉庫中搜索perl-下載安裝插件
2、插件安裝好之後,下載Perl SDK 編譯工具:https://www.perl.org/get.html
一般都在使用草莓的那個
下載安裝好之後配置IDEA,重新打開IDEA,點擊箭頭所指按鈕,配置Perl SDK安裝路徑,即安裝路徑中的bin文件夾即可
至此,環境配置完成
二、開始新建項目,選擇perl5
輸入項目名稱,在kind類型選擇Script
然後就可以開始編輯了
基本的入門級語法:只寫了我需要的,不在深入
#windows中不需要這行
#!/usr/bin/perl
#定義包名,與java包不一樣,可以與結構中的包名不一致,可不寫,默認爲main
package PackageName;
#use strict;使用嚴格模式(不用刪除即可):任何變量都必須先定義。定義時使用my或our來指定其範圍(局部、全局)。
use strict;
use warnings FATAL => 'all';
# 這是一個單行註釋
=pdo 多行註釋
聲明: 標量:$ (字符串,數字等)
數組:@
哈希:% (集合,鍵值對)
不同類型的變量可以使用相同的變量名
=cut
#兩種輸出方式
print( "Hello, world\n" );
print "Hello, world\n";
#單引號不會轉義,雙引號會,區別單雙引號
print "Hello, world\n"; # 雙引號:將引號中的轉義字符、參數等進行處理
print 'Hello, world\n'; # 單引號:完全當做字符串處理
#Here文檔又稱作heredoc、hereis、here-字串或here-腳本,是一種在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和
# 程序語言(像Perl、PHP、Python和Ruby)裏定義一個字串的方法。
my $a = 10;
my $var1 = <<"EOF";
這是一個 Here 文檔實例,使用雙引號。
可以在這輸如字符串和變量。
例如:a = $a
EOF
print "$var1\n";
my $var2 = <<'EOF';
這是一個 Here 文檔實例,使用單引號。
例如:a = $a
EOF
print "$var2\n";
#轉義字符
my $result = "菜鳥教程 \"runoob\"";
print "$result\n";
print "\$result\n";
#字符串相加與java不同
print "我的是我的"."你的還是我的"."\n";
#特殊字符,不可放入字符串中,在字符串中與普通字符串一樣
print "文件名 ".__FILE__."\n";
print "行號 ".__LINE__."\n";#此代碼當前行
print "包名 ".__PACKAGE__."\n";
print "__FILE__ __LINE__ __PACKAGE__\n";# 無法解析
#數組變量以 @ 開頭。訪問數組元素使用 $ + 變量名稱 + [索引值] 格式來讀取
my @array1 = (1, 2, 'Hello');
my @array2 = qw/這是 一個 數組/;
#數組索引值從 0 開始,即 0 爲第一個元素,1 爲第二個元素,以此類推。
#負數從反向開始讀取,-1 爲第一個元素, -2 爲第二個元素
my @sites = qw/google taobao runoob/;
print "$sites[0]\n";
print "$sites[1]\n";
print "$sites[2]\n";
print "$sites[-1]\n"; # 負數,反向讀取
#Perl 提供了可以按序列輸出的數組形式,格式爲 起始值 + .. + 結束值,實例如下:
my @var_10 = (1 .. 10);
my @var_20 = (10 .. 20);
my @var_abc = ('a' .. 'z');#字符需要加單引號,大寫相同
print "@var_10\n"; # 輸出 1 到 10
print "@var_20\n"; # 輸出 10 到 20
print "@var_abc\n"; # 輸出 a 到 z
#數組長度返回的是數組物理大小,而不是元素的個數,我們可以看以下實例:
my @array = (1, 2, 3);
$array[50] = 4;
my $size2 = @array;
my $max_index = $#array;
print "數組大小: $size2\n";
print "最大索引: $max_index\n";
#添加和刪除數組元素
#push @ARRAY, LIST將列表的值放到數組的末尾
#pop @ARRAY彈出數組最後一個值,並返回它
#shift @ARRAY彈出數組第一個值,並返回它。數組的索引值也依次減一。
#unshift @ARRAY, LIST將列表放在數組前面,並返回新數組的元素個數。
# 創建一個簡單是數組
@sites = ("google", "runoob", "taobao");
print "1. \@sites = @sites\n";
# 在數組結尾添加一個元素
push(@sites, "baidu");
print "2. \@sites = @sites\n";
# 在數組開頭添加一個元素
unshift(@sites, "weibo");
print "3. \@sites = @sites\n";
# 刪除數組末尾的元素
pop(@sites);
print "4. \@sites = @sites\n";
# 移除數組開頭的元素
shift(@sites);
print "5. \@sites = @sites\n";
#切割一個數組,並返回切割後的新數組:
my @sitess = qw/google taobao runoob weibo qq facebook 網易/;
my @sitess2 = @sitess[3, 4, 5];
print "@sitess2\n";
#數組元素替換使用 splice() 函數,語法格式如下:
my @nums = (1 .. 20);
print "替換前 @nums\n";
splice(@nums, 5, 5, 21 .. 25);#(數組,開始位置,替換個數,替換的值)
print "替換後 @nums\n";
#將字符串分割轉換爲數組
# 定義字符串
my $var_test = "runoob";
my $var_string = "www-runoob-com";
my $var_names = "google,taobao,runoob,weibo";
# 字符串轉爲數組
my @test = split('', $var_test);#直接拆分每一個字符
my @string = split('-', $var_string);
my @names = split(',', $var_names);
print "$test[3]\n"; # 輸出 com
print "$string[2]\n"; # 輸出 com
print "$names[3]\n"; # 輸出 weibo
#將數組轉換爲字符串
# 定義字符串
my $var_stringg = "www-runoob-com";
my $var_namess = "google,taobao,runoob,weibo";
# 字符串轉爲數組
my @stringg = split('-', $var_stringg);
my @namess = split(',', $var_namess);
# 數組轉爲字符串
my $string1 = join( '-', @stringg );
my $string2 = join( ',', @namess );
print "$string1\n";
print "$string2\n";
#數組排序:數組排序是根據 ASCII 數字值來排序。所以我們在對數組進行排序時最好先將每個元素轉換爲小寫後再排序。
# 定義數組
my @asites = qw(google taobao runoob facebook);
print "排序前: @asites\n";
# 對數組進行排序
@asites = sort(@asites);
print "排序後: @asites\n";
#合併數組:合併後數組大小爲兩個之和,而不是2
my @nnumbers = (my @odd, my @even);
#指定索引值可以讀取指定的元素,如下所示:
my $vvar = (5, 4, 3, 2, 1)[4];#[]來指定元素位置
print "var 的值爲 = $vvar\n";
#value可重複,key不能重複
my %data = ('google' => 'google.com', 'runoob' => 'runoob.com', 'taobao' => 'taobao.com');
my @keys = keys %data;
my $size = @keys;
print "1 - 哈希大小: $size\n";
my @values = values %data;
$size = @values;
print "2 - 哈希大小: $size\n";
#日期
my @months = qw( 一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月 );
my @days = qw(星期天 星期一 星期二 星期三 星期四 星期五 星期六);
(my $sec, my $min, my $hour, my $mday, my $mon, my $year, my $wday, my $yday, my $isdst) = localtime();
print "$mday $months[$mon] $days[$wday]\n";
#函數(方法)使用
sub Hello {# 函數定義
print "Hello, World!\n";
}
Hello();# 函數調用
#程序第一個參數爲 $_[0], 第二個參數爲 $_[1], 以此類推。perl默認按引用的方式調用它們。
# 定義求平均值函數
sub Average {
# 獲取所有傳入的參數
my $n = scalar(@_);
my $sum = 0;
foreach my $item (@_) {
$sum += $item;
}
my $average = $sum / $n;
print '傳入的參數爲 : ', "@_\n"; # 打印整個數組
print "第一個參數值爲 : $_[0]\n"; # 打印第一個參數
print "傳入參數的平均值爲 : $average\n"; # 打印平均值
}
# 調用函數
Average(10, 20, 30);
#變量的臨時賦值,使用 local 爲全局變量提供臨時的值,在退出作用域後將原來的值還回去。
# 全局變量
our $string = "Hello, World!";
sub PrintRunoob {
# PrintHello 函數私有變量
local $string;
$string = "Hello, Runoob!";
# 子程序調用的子程序
PrintMe();
print "PrintRunoob 函數內字符串值:$string\n";
}
sub PrintMe {
print "PrintMe 函數內字符串值:$string\n";
}
sub PrintHello {
print "PrintHello 函數內字符串值:$string\n";
}
# 函數調用
PrintRunoob();
PrintHello();
print "函數外部字符串值:$string\n";
#靜態變量:state 只在定義該變量的詞法作用域中有效
=pdo
注1:state僅能創建閉合作用域爲子程序內部的變量。
注2:state是從Perl 5.9.4開始引入的,所以使用前必須加上 use。
注3:state可以聲明標量、數組、哈希。但在聲明數組和哈希時,不能對其初始化(至少Perl 5.14不支持)。
=cut
use feature 'state';
sub PrintCount {
state $count = 0; # 初始化變量
print "counter 值爲:$count\n";
$count++;
}
for (1 .. 5) {
PrintCount();
}
#創建引用:定義變量的時候,在變量名前面加個\,就得到了這個變量的一個引用,比如:
#my $scalarref = \$foo; # 標量變量引用
#my $arrayref = \@ARGV; # 列表的引用
#my $hashref = \%ENV; # 哈希的引用
#my $coderef = \&handler; # 子過程引用
#my $globref = \*foo; # GLOB句柄引用
ps:在選擇項目結構時候重構只會更改項目名稱,但不會更改項目所在文件夾名稱,對於有強迫症的我來說很不爽,
連同文件夾一起更改可以將結構切換到 Project Files,然後重構-重命名,就會都改掉