my @array = (1,2,3,4,5); my $deleted_num = splice(@array, 2, 1); print $deleted_num . "\n"; print @array;
use List::Util qw(shuffle);
@array = shuffle(@array);
$#array;
もしくはscalar変数に代入を行うことでもわかる。(こちらは実際の個数)
1. $sample_num1 = @array;
2. $sample_num2 = scalar(@$array); #リファレンスの場合
[ copy & paste ]
[ - copyモードへ
] - paste
[その他]
: screenコマンドの入力へ
[.screenrc]
# statuslineの表示
hardstatus alwayslastline "%{= wk} %-w%{=bu dr}%n %t%{-}%+w %= %{=b wb}%y/%m/%d %{=b wb}%c"
参考サイト: screenコマンド一覧
]]>
[対応表]
0 ファイルシステムのデバイス情報
1 Iノード番号
2 ファイルのパーミッション情報
3 ファイルへのハードリンク数
4 ファイル所有者のユーザID
5 ファイル所有者のグループID
6 デバイス識別子
7 ファイルサイズ(バイト)
8 最終アクセス時間
9 最終変更時間
10 最終iノード変更時間
11 最適ブロックサイズ
12 ファイルに割当てられているブロック数
[使用例]
#ファイルサイズを調べる
$file_size = (stat'./power.pl')[7];
print "$file_size\n";
[使用例]
#ファイルハンドルにWRITERを設定する
#0.1秒プログラムを停止
[関連記事]
sleep - プログラムの一時停止
[例]
-------------------------------------------------------------------
open(SERIAL, "+< ./serial.txt"); #ファイルを読み書きモードで開く
flock(SERIAL, 2); #書き込み宣言
my ($serial) = <SERIAL>; #値を読み込む
chomp $serial; #改行を取り除く
$serial = $serial+1; #値に1追加する
truncate(SERIAL, 0); #ファイルを空にする
seek(SERIAL, 0, 0); #ファイルの先頭に移動
print SERIAL "$serial"; #新しい値を書き込み
close(SERIAL); #ファイルを閉じる。ロックは自動的に解除されます
-------------------------------------------------------------------
[例: 追記の場合]
-------------------------------------------------------------------
open(LOG, "+< ./log.txt"); #ファイルを読み書きモードで開く
flock(LOG, 2); #ロック
seek(LOG, 0, 2); #ファイルの末尾に移動
print LOG "$log\n"; #ファイルに追記
close(LOG); #ファイルを閉じる
-------------------------------------------------------------------
※補足
以下のように書くのは間違い。ファイルを開いた時点でファイルサイズは0になっているため、ロックする意味はない。
open(SERIAL, "> ./serial.txt");
flock(SEIRAL, 2);
[書式]
seek(FILEHANDLE, オフセット, 起点);
オフセットは起点からのバイト数です。
起点は以下のように 0, 1, 2 の数字で指定します。
0 ・・・ ファイルの先頭
1 ・・・ 現在のファイルポインタ
2 ・・・ ファイルの末尾
[使用例]
seek(FILEHANDLE, 0, 0); #ファイルの先頭に移動します
seek(FILEHANDLE, 0, 2); #ファイルの末尾に移動します
#!/usr/bin/perl use DirHandle; #カレントディレクトリ内のファイルを表示 my $dir = new DirHandle '.'; print "$name\n" while ($name = $dir->read); $dir->close;
[root@server temp]# ./dirhandle.pl . .. package.pl dirhandle.pl
use File::Copy;
copy("コピー元のファイル名", "コピー先のファイル名");
move("移動元", "移動先");
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Encode;
binmode STDOUT, ':utf8';
use XML::RSS::Parser;
use LWP::UserAgent;
use HTTP::Request::Common;
use Date::Manip;
use Data::Dumper;
my $uri = 'http://b.hatena.ne.jp/hotentry/it.rss';
my $ua = new LWP::UserAgent;
my $request = GET($uri);
my $response = $ua->request($request);
my $parser = XML::RSS::Parser->new;
my $feed = $parser->parse_string($response->content);
foreach ( $feed->query('item') ) {
my $title = $_->query('title')->text_content;
my $description = $_->query('description')->text_content;
my $timestamp = $_->query('dc:date')->text_content;
my $link = $_->query('link')->text_content;
print "$title ($link)\n\n $description \n\n ($timestamp)\n\n";
}
]]>| $0 | スクリプトのコマンド名 |
| $! | エラー番号、もしくはエラー文字列 |
| $? | 外部コマンドなどを実行した際の最後のステータス値 |
| $@ | 直前のevalで発声した例外メッセージ |
| $n | パターンマッチ時にn番目の()にマッチした文字列 |
| $| | 出力のバッファリング、0以外でバッファリングが無効になる |
| $. | ファイルハンドルの現在ある位置の行数 |
| $/ | 入力時の区切り文字。デフォルトは改行文字。 |
| $, | print使用時のセパレーター |
| $" | print "@list_context"とした際の区切り文字 |
| $$ | プロセスのpid |
| @ARGV | スクリプトに渡された引数 |
| $^D | デバッグフラグの値 |
| $^E | OS特有のエラーメッセージ |
| $^T | スクリプト実行時刻(epoch time) |
| %ENV | 環境変数 |
| %INC | インクルードされたライブラリなどを記録 |
| %SIG | シグナルハンドラを設定するためのハッシュ |
| @INC | ライブラリの検索対象ディレクトリ |
$0の使用例
[例: test.pl]
#!/usr/bin/perl
print "$0\n";
[実行結果]
[testuser@server testuser]$ ./test.pl
./test.pl
[testuser@server testuser]$ /home/testuser/test.pl
/home/testuser/test.pl
[例 argv.pl]
#!/usr/bin/perl
print @ARGV";
[実行結果]
[testuser@server testuser]$ ./argv.pl a b c d e
a b c d e
:%s/置換前の文字列/置換後の文字列/g で開いているファイル全てにおいて置換をします。置換をするかどうかを確認したい場合は以下のようにcをつけます。
パス名などを変更する際には/を区切り文字に使うのではなく、;などを区切り文字に使うと便利
文章全体でなく、特定範囲のみ置換したい場合は置換したい行の範囲を指定すればよい。
[例] - 63行目から79行目まででbeautyをhairnailに一括置換
マッチングを利用した置換は正規表現を使います。
[例]
マッチした部分\(.*\)は\1に入るので、例えば$certCompanyEngは$form->{'CertCompanyEng'}に置換されます。
改行コードを挿入するにはCtrl+vと押した後にEnterを押せばよい。以下の例ではスペースを改行に置換。
複数ファイルを一括で置換する場合はargsコマンドで対象となるファイルを選び、argsdoコマンドで置換する。以下カレントディレクトリ以下にあるcファイルを対象にmy_fooをMy_Fooに置換。(置換対象ファイルはargaddした後にbuffers!で確認可能)
| o | ファイル及びディレクトリを別画面で開く |
| i | ファイルサイズやタイムスタンプなどの詳細を表示 |
| d | ディレクトリを作成 |
| x | 指定したアプリケーションでファイルを開く |
1. qaにて記録を開始
2. 任意の操作
3. qにて記録を終了
4. @aにて記録したマクロを実行。10回繰り返す場合には10@a
※ aの文字は任意。a-zまで記録可能。(レジスタ)
※ aではなくAとした場合、既存のマクロに処理を追加する。
[書式]
:sp 画面を上下に分割
:sp ファイル名 指定したファイルを分割した画面に表示
Ctrl-w p 画面間の移動
Ctrl-w k 上の画面に移動
Ctrl-w j 下の画面に移動
Ctrl-w l 右の画面に移動
Ctrl-w h 左の画面に移動
Ctrl-w K 現在の画面を上に移動
Ctrl-w J 現在の画面を下に移動
Ctrl-w L 現在の画面を右に移動
Ctrl-w H 現在の画面を左に移動
Ctrl-w 10+ カーソルのある画面を10行分大きくする
Ctrl-w 10- カーソルのある画面を10行分小さくする
Ctrl-w = 画面のサイズを同じにする
#!/usr/bin/perl
use Data::Dumper;
@columns = qw/firstname lastname/;
@tokens = qw/Ichirou Jirou Saburou/;
my @result ;
foreach my $column (@columns) {
push(@result, map { { $column => { '-like' => "%$_%" } }; } @tokens);
}
print Dumper(@result);
$VAR1 = {
'firstname' => {
'-like' => '%Ichirou%'
}
};
$VAR2 = {
'firstname' => {
'-like' => '%Jirou%'
}
};
$VAR3 = {
'firstname' => {
'-like' => '%Saburou%'
}
};
$VAR4 = {
'lastname' => {
'-like' => '%Ichirou%'
}
};
$VAR5 = {
'lastname' => {
'-like' => '%Jirou%'
}
};
$VAR6 = {
'lastname' => {
'-like' => '%Saburou%'
}
};
]]>
[書式例]
smbmount //リモートサーバ名/ディレクトリ マウント先 -o username=ユーザ名, password=パスワード, codepage=cp932, iocharset=ホスト側文字コード
[その他主なオプション]
fmask - マウント時のファイルのパーミッション
dmask - マウント時のディレクトリのパーミッション
uid - マウント時のユーザID
gid - マウント時のグループID
password - 接続先のパスワード
[使用例]
#毎回マウントするのが面倒な場合、以下のようにfstabに記述しておけばよい。
どうしても文字化けが発生する場合にはfs tyeにsmbfsではなくcifsを指定してみてください。smbfsの文字コード変換はカーネルが行います。一方smbclientでは文字コード変換を行うのはsambaになります。(2006/05/12 追記)
CentOS 5よりsmbmountはなくなったため、cifsにてマウントすればよい。