CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板: http://kohada.2ch.net/php/)
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
荒らしはスルー推奨。
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、
Perlの奥深さについて皆で語り合い、追求してまいりましょう。
www.perl.org/get.html
Download Latest Stable Source (5.18.2)
▼前スレ
Perlについての質問箱 61箱目
http://toro.2ch.net/test/read.cgi/tech/1381561905/
Perlについての質問箱 62箱目
http://toro.2ch.net/test/read.cgi/tech/1385039352/
探検
Perlについての質問箱 63箱目
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2014/02/19(水) 23:36:23.292016/02/16(火) 10:39:05.36ID:rD0NYg0s
面白いというか、みんな知ってると思う
2016/02/17(水) 00:31:54.19ID:xaInBBRG
うん。そしてそれが有用ならもっと使われているはずだが、現実はあまり使われていない。
コードが実行時に生成されるようなダイナミックなものはデバッグ、テスト、保守がしにくい。
コードが実行時に生成されるようなダイナミックなものはデバッグ、テスト、保守がしにくい。
2016/02/17(水) 00:40:54.86ID:wnysiCN2
>>70
何の話してるのお前?
何の話してるのお前?
2016/02/19(金) 00:01:04.65ID:ifdckMGM
文字列の/*と*/で囲まれた部分と/*と*/に色をつけたい
例えば$str="/*abcdef*/";の場合は
$str =~ s/\/\*/<font color=\"green\">\/\*/g;
$str =~ s/\*\//\*\/<\/font>/g;でできましたが
$str="/*//////abcdef/////*/";の場合はうまくできませんでした。
どうすればうまくいくのでしょうか?
例えば$str="/*abcdef*/";の場合は
$str =~ s/\/\*/<font color=\"green\">\/\*/g;
$str =~ s/\*\//\*\/<\/font>/g;でできましたが
$str="/*//////abcdef/////*/";の場合はうまくできませんでした。
どうすればうまくいくのでしょうか?
2016/02/19(金) 01:43:09.22ID:jNAd9H+F
$str = ̄ s{(/¥*.*?¥*/)}{<font color=”green”>$1</font>}g;
2016/02/22(月) 17:33:02.93ID:BncrDEhF
my $data = {
'data1' => [1,2,3],
'data2' => [4,5,6],
'data3' => [7,8,9]
};
上のような配列のハッシュで
ハッシュそれぞれの0番目、1番目、2番目のデータを
取り出したい場合どうすればいいのでしょうか
for (my $i = 0; $i < 3; $i++) {
print $data->{"data1"}[$i],"\n";
print $data->{"data2"}[$i],"\n";
print $data->{"data3"}[$i],"\n";
}
'data1' => [1,2,3],
'data2' => [4,5,6],
'data3' => [7,8,9]
};
上のような配列のハッシュで
ハッシュそれぞれの0番目、1番目、2番目のデータを
取り出したい場合どうすればいいのでしょうか
for (my $i = 0; $i < 3; $i++) {
print $data->{"data1"}[$i],"\n";
print $data->{"data2"}[$i],"\n";
print $data->{"data3"}[$i],"\n";
}
75デフォルトの名無しさん
2016/02/22(月) 22:57:33.32ID:mB6Cjpa076デフォルトの名無しさん
2016/02/22(月) 23:01:42.17ID:mB6Cjpa0 ごめん、ちゃんと書いたのに何かアクシデントがあったようだ。もう一回送るよ。
それで合ってるよ。
http://perldoc.jp/pod/perldsc
を読みなさい。
$data->{"data1"}->[$i]
が正式な書き方だが (配列|ハッシュ)要素の参照が連続していれば間の矢印を省略してもいい。
個人的には、リファレンスだということを意識していたいから省略しないけどね。
それで合ってるよ。
http://perldoc.jp/pod/perldsc
を読みなさい。
$data->{"data1"}->[$i]
が正式な書き方だが (配列|ハッシュ)要素の参照が連続していれば間の矢印を省略してもいい。
個人的には、リファレンスだということを意識していたいから省略しないけどね。
2016/02/23(火) 03:28:09.20ID:Oh6h4g2T
シングルクォートもダブルクォートも要らねぇ。
my $data = {
data1 => [1,2,3],
data2 => [4,5,6],
data3 => [7,8,9]
};
print $data->{data1}[$i],"\n";
my $data = {
data1 => [1,2,3],
data2 => [4,5,6],
data3 => [7,8,9]
};
print $data->{data1}[$i],"\n";
2016/02/23(火) 10:27:03.85ID:usPktkPU
Web::Scraperでスクレイピングしているのですが
サンプルでは
use YAML;
warn Dump $res;
という書き方でこの方法だとデータの構造がよくわからないのですが
Dump何をつかっているのですか?
Ubuntu14.04の64bitを使っています。
サンプルでは
use YAML;
warn Dump $res;
という書き方でこの方法だとデータの構造がよくわからないのですが
Dump何をつかっているのですか?
Ubuntu14.04の64bitを使っています。
2016/02/24(水) 18:07:14.97ID:E2TS40Hx
print $res->{list}[1]->{link}[0]->{url},"\n";
print $res->{list}[1]->{link}[0]->{title},"\n";
print $res->{list}[1]->{link}[1]->{url},"\n";
print $res->{list}[1]->{link}[1]->{title},"\n";
こういったデータをforeahで出力したい場合
???にはどのようにかけばいいのでしょうか
foreah my $i(???) {
print $i->{url};
print $i->{title};
}
print $res->{list}[1]->{link}[0]->{title},"\n";
print $res->{list}[1]->{link}[1]->{url},"\n";
print $res->{list}[1]->{link}[1]->{title},"\n";
こういったデータをforeahで出力したい場合
???にはどのようにかけばいいのでしょうか
foreah my $i(???) {
print $i->{url};
print $i->{title};
}
2016/02/24(水) 19:01:01.43ID:1Q1vaK3L
>>81
なんで同じのが2書いあるんだよ
なんで同じのが2書いあるんだよ
2016/02/24(水) 22:23:15.99ID:VYWYZ9lH
>>81
my $links = $res->{list}[1]{link};
for my $link ( @$links ) {
say $link->{$_} for qw/url title/;
}
my $links = $res->{list}[1]{link};
for my $link ( @$links ) {
say $link->{$_} for qw/url title/;
}
2016/02/24(水) 22:43:39.56ID:PL8yH0Su
>>83
say forの行が気持ち悪い。やり直し
say forの行が気持ち悪い。やり直し
2016/02/24(水) 22:47:52.27ID:VYWYZ9lH
8681
2016/02/25(木) 09:33:24.21ID:AM2kna+z >>83
ありがとうございました。
一度変数に保存してからすればよかったのですね。
my $links = $res->{list}[1]{link};
for my $link ( $res->{list}[1]{link} ) {
こういう書き方をしていてリストにするにはどうしたらいいのか
わからないので質問させていただきました。
たいへん勉強になりましたありがとうございました。
ありがとうございました。
一度変数に保存してからすればよかったのですね。
my $links = $res->{list}[1]{link};
for my $link ( $res->{list}[1]{link} ) {
こういう書き方をしていてリストにするにはどうしたらいいのか
わからないので質問させていただきました。
たいへん勉強になりましたありがとうございました。
2016/02/25(木) 23:12:11.74ID:B0t5yMaC
>>86
デリファレンスは一度代入しなくてもできるけどちょっとわかりにくいかなって
for my $link ( @{ $res->{list}[1]{link} } ) {
新しい書き方だとこんなのもあったり(postfix dereferencing)
$res->{list}[1]{link}->@*
デリファレンスは一度代入しなくてもできるけどちょっとわかりにくいかなって
for my $link ( @{ $res->{list}[1]{link} } ) {
新しい書き方だとこんなのもあったり(postfix dereferencing)
$res->{list}[1]{link}->@*
2016/02/26(金) 12:14:26.93ID:lmpGubNL
1位は「Python」、プログラミング言語別の平均年収ランキングが発表
http://www.mdn.co.jp/di/newstopics/44248/
2位には「Perl」(平均年収633万円)、3位には「Ruby」(平均年収606万円)がランクインした。
http://www.mdn.co.jp/di/newstopics/44248/
2位には「Perl」(平均年収633万円)、3位には「Ruby」(平均年収606万円)がランクインした。
89デフォルトの名無しさん
2016/02/27(土) 00:21:51.17ID:7I91l6Zs >>67-68
超亀レスですがありがとうございます、勉強になりました!
超亀レスですがありがとうございます、勉強になりました!
90デフォルトの名無しさん
2016/02/27(土) 00:49:08.38ID:fhIzDVzC my $date = '平成28年2月26日18:55';
my $week = '金';
$date =~ s/日/日 $week曜日 /;
print $date;
をすると文字化けするのですが原因がわかりません。
my $week = '金';
$date =~ s/日/日 $week曜日 /;
print $date;
をすると文字化けするのですが原因がわかりません。
2016/02/27(土) 10:36:17.16ID:VqgeV1ea
環境とか文字コードは
92デフォルトの名無しさん
2016/02/27(土) 13:36:07.74ID:fhIzDVzC さくらのレンタルサーバーのCGIでPerl 5.14.4です。
$weekを削除すると文字化けはおこりません。
別のプログラムではうまく動いているのですが
$weekを削除すると文字化けはおこりません。
別のプログラムではうまく動いているのですが
9392
2016/02/27(土) 14:09:58.43ID:fhIzDVzC $week\xe6\x9b\x9c\xe6\x97\xa5になっているみたい
プログラム内に入力している日本語がprint表示するときにくずれるようです。
プログラム内に入力している日本語がprint表示するときにくずれるようです。
2016/02/27(土) 14:23:16.95ID:VqgeV1ea
${week曜日}
${week}曜日
>プログラム内に入力している日本語がprint表示するときにくずれる
やっぱutf8フラグかなあ…
${week}曜日
>プログラム内に入力している日本語がprint表示するときにくずれる
やっぱutf8フラグかなあ…
9592
2016/02/27(土) 14:55:51.07ID:fhIzDVzC すみませんプログラムミスでした。
2016/03/05(土) 17:24:53.21ID:jVpVtd3O
日付で教えて下さい
1/23 12:34
を西暦をくっつけて
2016/1/23 12:34に変換したいのですが
例えば未来の日時の場合は
5/1 12:34
を2015/5/1 12:34と1年引いた年にしたいのですが
下のプログラムでは
2015/05/02 06:45:10になります
年の引き算はどうすればいいのでしょうか
use strict;
use warnings;
use 5.010;
use Time::Piece;
use Time::Seconds;
my $t = localtime;
my $year = $t->year;
my $str = "1/23 12:34";
my $date = Time::Piece->strptime("$year/$str", '%Y/%m/%d %H:%M');
if ($t < $date) {
$date -= ONE_YEAR;
}
say $t->strftime('%Y-%m-%d %H:%M:%S');
say $date->strftime('%Y-%m-%d %H:%M:%S');
1/23 12:34
を西暦をくっつけて
2016/1/23 12:34に変換したいのですが
例えば未来の日時の場合は
5/1 12:34
を2015/5/1 12:34と1年引いた年にしたいのですが
下のプログラムでは
2015/05/02 06:45:10になります
年の引き算はどうすればいいのでしょうか
use strict;
use warnings;
use 5.010;
use Time::Piece;
use Time::Seconds;
my $t = localtime;
my $year = $t->year;
my $str = "1/23 12:34";
my $date = Time::Piece->strptime("$year/$str", '%Y/%m/%d %H:%M');
if ($t < $date) {
$date -= ONE_YEAR;
}
say $t->strftime('%Y-%m-%d %H:%M:%S');
say $date->strftime('%Y-%m-%d %H:%M:%S');
2016/03/05(土) 17:32:45.69ID:Kk7Ussws
2016/03/06(日) 18:03:04.50ID:OXa3i/Gy
$str =
2016/03/07(月) 00:42:40.54ID:Gv57dso9
>>96
年月日に分けたのち、年を -1 する。
年月日に分けたのち、年を -1 する。
100デフォルトの名無しさん
2016/03/07(月) 06:16:56.64ID:eudRNLDZ だからそうすると2月29日が出来てしまうって言ってるわけ
101デフォルトの名無しさん
2016/03/07(月) 21:18:09.27ID:jBGm+KXA pythonのスクリプトの頭に、use strict;って書いた。頭いかれてきたw
102デフォルトの名無しさん
2016/03/07(月) 23:50:19.65ID:fqGSH3nt my($year,$month,$day,$hour,$min) = (localtime)[5,4,3,2,1];
my $str = "1/23 12:34";
my($strmonth,$strday,$strhour,$strmin) = $str =~ m|([0-9]+)/([0-9]+) ([0-9]+):([0-9]+)|;
if (
sprintf('%02d%02d%02d%02d',$strmonth,$strday,$strhour,$strmin)
gt
sprintf('%02d%02d%02d%02d',$month+1,$day,$hour,$min)
) {
printf("%04d/%02d/%02d %02d:%02d\n",1900+$year-1,$strmonth,$strday,$strhour,$strmin);
}
else {
printf("%04d/%02d/%02d %02d:%02d\n",1900+$year,$strmonth,$strday,$strhour,$strmin);
}
# 基本に忠実に。応用はそれから
my $str = "1/23 12:34";
my($strmonth,$strday,$strhour,$strmin) = $str =~ m|([0-9]+)/([0-9]+) ([0-9]+):([0-9]+)|;
if (
sprintf('%02d%02d%02d%02d',$strmonth,$strday,$strhour,$strmin)
gt
sprintf('%02d%02d%02d%02d',$month+1,$day,$hour,$min)
) {
printf("%04d/%02d/%02d %02d:%02d\n",1900+$year-1,$strmonth,$strday,$strhour,$strmin);
}
else {
printf("%04d/%02d/%02d %02d:%02d\n",1900+$year,$strmonth,$strday,$strhour,$strmin);
}
# 基本に忠実に。応用はそれから
103デフォルトの名無しさん
2016/03/08(火) 00:11:41.92ID:2waKAzbH >>102
$month -= 2;
my $str = "2/29 12:34";
したら、2015/02/29って答が出るコードなんぞ貼るなや
元の質問者のコードに、
ふつうに$obj->is_leap_yearの判定加えて、
2/29跨ぎなら、LEAP_YEAR
引けばいいだけだろ。
$month -= 2;
my $str = "2/29 12:34";
したら、2015/02/29って答が出るコードなんぞ貼るなや
元の質問者のコードに、
ふつうに$obj->is_leap_yearの判定加えて、
2/29跨ぎなら、LEAP_YEAR
引けばいいだけだろ。
104デフォルトの名無しさん
2016/03/09(水) 00:16:20.50ID:Djq1Ua6S この場合は 2015/02/29 が欲しい答え
105デフォルトの名無しさん
2016/03/09(水) 05:51:47.62ID:BRdU+Z94 バギーなコードが眼に見える様だ
106デフォルトの名無しさん
2016/03/10(木) 00:41:03.49ID:m8iGuBqw 要件にない仕様を自己満足で追加してはいけない
この件はTime::Pieceだとうまくこなせない問題
融通がきかないのがオレオブジェクトのつらいところだ
この件はTime::Pieceだとうまくこなせない問題
融通がきかないのがオレオブジェクトのつらいところだ
107デフォルトの名無しさん
2016/03/10(木) 06:53:37.48ID:cOoRDwdC Time::Piece関係ねーだろ。
頭悪いな。
頭悪いな。
108デフォルトの名無しさん
2016/03/13(日) 00:11:27.55ID:W4AXq/NT localtimeとTimelocalは次スレのテンプレに追加するか
同じ質問が繰り返されてみんな同じところではまるからなあ
同じ質問が繰り返されてみんな同じところではまるからなあ
109デフォルトの名無しさん
2016/03/17(木) 15:49:56.51ID:HmsCvSUF クッキーへの書き込み処理での質問
エラーメッセージを取得処理
print "Content-type:text/html\n";
if(エラー数が0の場合){
投稿データをクッキーに書き込む処理
}
print "\n";
エラーメッセージの表示処理
というようにエラーメッセージの取得と表示の間に
print "Content-type:text/html\n";print "\n";を挟む形になってしまうので
これらをまとめてサブルーチン化したくてもできません
こういう場合でもうまくサブルーチン化できる方法を教えてください
エラーメッセージを取得処理
print "Content-type:text/html\n";
if(エラー数が0の場合){
投稿データをクッキーに書き込む処理
}
print "\n";
エラーメッセージの表示処理
というようにエラーメッセージの取得と表示の間に
print "Content-type:text/html\n";print "\n";を挟む形になってしまうので
これらをまとめてサブルーチン化したくてもできません
こういう場合でもうまくサブルーチン化できる方法を教えてください
110デフォルトの名無しさん
2016/03/17(木) 17:41:21.64ID:H1m/hwv2 エラーメッセージの出力時にContent-typeから出力すればいいのでは
111デフォルトの名無しさん
2016/03/17(木) 18:09:04.11ID:r8Uypp4J112デフォルトの名無しさん
2016/03/19(土) 22:54:54.53ID:zQsVsKn8 my $kukkii =
113デフォルトの名無しさん
2016/03/20(日) 14:44:26.98ID:AaFdygkh '';
114デフォルトの名無しさん
2016/03/20(日) 23:05:38.19ID:ZT1ttS3p 何をしたかったのかよくわからないけど、せめて cookie と書いてほしかった。
115デフォルトの名無しさん
2016/03/21(月) 23:09:59.48ID:mpXdX/cy 住所を入れる変数でさ
$adoresu = ・・・
みたいな名前つかうヤツ、いるよね
英語なのか何なのか、よくワカラン
$adoresu = ・・・
みたいな名前つかうヤツ、いるよね
英語なのか何なのか、よくワカラン
116デフォルトの名無しさん
2016/03/23(水) 01:56:25.05ID:isz3o5XG $message = エラーメッセージを取得;
print "Content-type:text/html\n";
if(エラー数が0の場合){
投稿データをクッキーに書き込む処理
}
print "\n";
print $message; # エラーメッセージの表示処理
print "Content-type:text/html\n";
if(エラー数が0の場合){
投稿データをクッキーに書き込む処理
}
print "\n";
print $message; # エラーメッセージの表示処理
117デフォルトの名無しさん
2016/03/23(水) 21:53:51.11ID:ftv772ff my $str = "あああabcあああcdefghあああ123456";
この文字列で半角英数字の部分をAAAに置換するにはどうすればいいですか?
あああAAAあああAAAあああAAAになればOKです
この文字列で半角英数字の部分をAAAに置換するにはどうすればいいですか?
あああAAAあああAAAあああAAAになればOKです
118デフォルトの名無しさん
2016/03/23(水) 23:01:13.44ID:OHojQvKP119デフォルトの名無しさん
2016/03/24(木) 00:07:44.52ID:3WWxxvBQ my $str = "あああabcあああcdefghあああ123456";
print $str, "\n";
$str =~ s/[A-Za-z0-9]+/AAA/g;
print $str, "\n";
print $str, "\n";
$str =~ s/[A-Za-z0-9]+/AAA/g;
print $str, "\n";
120デフォルトの名無しさん
2016/03/25(金) 01:11:07.68ID:v9Mc4pMx ありがとうございます。おかげで宿題を提出することができました。
リンク先のページを読んでも何が何だかさっぱり分かりませんでした。
リンク先のページを読んでも何が何だかさっぱり分かりませんでした。
121デフォルトの名無しさん
2016/03/27(日) 01:06:33.94ID:jno5DU+g パールでまた問題に直面したら話題を提供してあげますので楽しみにしてるんだぞ。
122デフォルトの名無しさん
2016/03/27(日) 15:47:58.07ID:HfxbfBB0 ありがとうございます。
123デフォルトの名無しさん
2016/04/14(木) 19:01:51.27ID:v1e64Ann ファイル演算子の-eと-fの違いは?
ファイルが存在するかどうかはどっちを使っても良いのですか?
ファイルが存在するかどうかはどっちを使っても良いのですか?
124デフォルトの名無しさん
2016/04/14(木) 19:46:27.77ID:G3MchQfa すみません。初めてperlを使うのですが、perlでQRコードを生成したいです。
ブラウザからアクセスしてQRコードの標準出力は出来たのですが、ファイルを生成する方法がわかりません。
以下のソースを実行すると、pngが生成されるのですが、生成されたpngをダブルクリックしても開けなくなります。
use GD::Barcode::QRcode;
binmode STDOUT;
my $qr = GD::Barcode::QRcode->new('test',{Ecc=>M, Version=>5, ModuleSize=>3})->plot();
open my $fh, '>', 'qr.png' or die;
print $fh $qr->png;
close $fh;
もしお分かりの方がいらっしゃったらお願いします。
ブラウザからアクセスしてQRコードの標準出力は出来たのですが、ファイルを生成する方法がわかりません。
以下のソースを実行すると、pngが生成されるのですが、生成されたpngをダブルクリックしても開けなくなります。
use GD::Barcode::QRcode;
binmode STDOUT;
my $qr = GD::Barcode::QRcode->new('test',{Ecc=>M, Version=>5, ModuleSize=>3})->plot();
open my $fh, '>', 'qr.png' or die;
print $fh $qr->png;
close $fh;
もしお分かりの方がいらっしゃったらお願いします。
125デフォルトの名無しさん
2016/04/14(木) 20:56:59.29ID:rjSU//7G126124
2016/04/14(木) 21:09:45.25ID:G3MchQfa127デフォルトの名無しさん
2016/04/24(日) 15:13:08.67ID:mI4IMx9A centos、zshの環境で、plenvを使っていて、apacheでcgiを動かそうと考えています。
/var/www/html 直下で #!/usr/bin/perl のcgiが動くところまではブラウザで確認できました。
あとはplenvの下記初期設定をするだけ、と思ったところで詰まりました。
export PATH=~/.plenv/bin:$PATH
eval "$(plenv init -)"
apacheの自動起動では ..zshrc を指定するところがありません。
とりあえず下記で、plenvでインストールしたパスだけは設定したのですが、
eval "$(plenv init -)" の中でどんな処理がされているのかわかりません。
# echo "PATH=/home/centos/.plenv/shims:$PATH" >> /etc/sysconfig/httpd
# /etc/init.d/httpd restart
eval "$(plenv init -)" ではどんな処理がされているのでしょうか?
また、plenvの環境は、パスさえ設定しておけば、特に支障はないのでしょうか?
/var/www/html 直下で #!/usr/bin/perl のcgiが動くところまではブラウザで確認できました。
あとはplenvの下記初期設定をするだけ、と思ったところで詰まりました。
export PATH=~/.plenv/bin:$PATH
eval "$(plenv init -)"
apacheの自動起動では ..zshrc を指定するところがありません。
とりあえず下記で、plenvでインストールしたパスだけは設定したのですが、
eval "$(plenv init -)" の中でどんな処理がされているのかわかりません。
# echo "PATH=/home/centos/.plenv/shims:$PATH" >> /etc/sysconfig/httpd
# /etc/init.d/httpd restart
eval "$(plenv init -)" ではどんな処理がされているのでしょうか?
また、plenvの環境は、パスさえ設定しておけば、特に支障はないのでしょうか?
128デフォルトの名無しさん
2016/04/24(日) 16:10:25.44ID:pOtqw7s6 最後の行だけ。
普通に、echo $(plenv init -)すれば、標準出力に内容が出ます。
普通に、echo $(plenv init -)すれば、標準出力に内容が出ます。
129デフォルトの名無しさん
2016/04/24(日) 17:03:31.20ID:jLfEtDRT >>127
そーすこーどにぜんぶかいてあります
そーすこーどにぜんぶかいてあります
130127
2016/04/24(日) 23:45:45.94ID:WFRvhXno131デフォルトの名無しさん
2016/04/25(月) 02:23:47.24ID:wavxOtJH echoしなくてもplenv init - だけでいいよw
もっとも、それ見た後は
そーすこーどみれだけどなw
もっとも、それ見た後は
そーすこーどみれだけどなw
132デフォルトの名無しさん
2016/04/27(水) 09:59:00.96ID:I/i5T1uZ openで開いたファイルをcloseで閉じる前にexitなのでプログラム強制終了した場合
自動的に閉じられてますか?
何か問題ありますか?
自動的に閉じられてますか?
何か問題ありますか?
133デフォルトの名無しさん
2016/04/27(水) 13:09:15.67ID:3LxG86Of closeされることが保証されるわけではないが、普通のOSなら
OSがcloseを発行する。何を問題とみなすかによるが普通は問題ない
OSがcloseを発行する。何を問題とみなすかによるが普通は問題ない
134デフォルトの名無しさん
2016/04/28(木) 01:35:18.90ID:rK49iHPu cgiなら問題ないけどmod_perlとかだとファイルディスクリプタ消費したままになる
135デフォルトの名無しさん
2016/04/28(木) 02:09:41.77ID:hmSh3kQm exit ではなく die を使うという方法もある。もちろん eval ブロックの中で。
136デフォルトの名無しさん
2016/04/29(金) 11:09:29.51ID:OUpC6wqc END {
close(FILE);
}
もしくは
open(my $file,'file.txt');
だな
close(FILE);
}
もしくは
open(my $file,'file.txt');
だな
137デフォルトの名無しさん
2016/04/29(金) 19:53:28.89ID:WQhKsXVS tmp.datをlog.datにrenameするときrename失敗したら成功するまで繰り返す処理をしたい
このようにrename成功したらループを抜けるというやり方でもいいんでしょうか?
他にいいやり方はありますか?
for($n=0;$n<=100;$n++){
$rename_seikou = rename("tmp.dat","log.dat");
if($rename_seikou==1){
last;
}
}
このようにrename成功したらループを抜けるというやり方でもいいんでしょうか?
他にいいやり方はありますか?
for($n=0;$n<=100;$n++){
$rename_seikou = rename("tmp.dat","log.dat");
if($rename_seikou==1){
last;
}
}
138デフォルトの名無しさん
2016/04/29(金) 20:40:17.89ID:bfvjxGWD 本当にそういう繰り返しをしたいのなら sleep を入れた方がいいと思う。
それから、失敗した時は原因を確認した方がいいと思う。つまり、こんな感じ。
use Errno 'EBUSY';
if ( rename( $src,$dest)){
# 成功
} elsif ( $! eq EBUSY){
# 多分、別のプロセスで使用中。少し待てば成功するかも。
} else {
# 待っても無駄だろう。
die( $!);
}
それから、失敗した時は原因を確認した方がいいと思う。つまり、こんな感じ。
use Errno 'EBUSY';
if ( rename( $src,$dest)){
# 成功
} elsif ( $! eq EBUSY){
# 多分、別のプロセスで使用中。少し待てば成功するかも。
} else {
# 待っても無駄だろう。
die( $!);
}
139デフォルトの名無しさん
2016/04/29(金) 20:50:54.01ID:bfvjxGWD ごめん、間違えた。
$! eq EBUSY
じゃなくて
$! == EBUSY
$! eq EBUSY
じゃなくて
$! == EBUSY
140デフォルトの名無しさん
2016/04/30(土) 11:00:17.55ID:DNyH92Gg 正規表現での置換について質問です。
<ul>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li>あ</li>
</ul>
上の最後の<li>だけ<li class="a">に置換したです。
1時間以上考えてますができません。
<ul>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li>あ</li>
</ul>
上の最後の<li>だけ<li class="a">に置換したです。
1時間以上考えてますができません。
141140
2016/04/30(土) 11:01:02.01ID:DNyH92Gg 間違えました。
置換したです→置換したいです
置換したです→置換したいです
142デフォルトの名無しさん
2016/04/30(土) 11:11:29.23ID:dxKZGhAw 正規表現は少しでもほんの条件が不明瞭であれば誰にも書くことはできない
143140
2016/04/30(土) 11:14:44.17ID:DNyH92Gg 自己解決しました。
$a =~ s/(^.*)\<li\>(.*$)/$1\<li class\=\"a\"\>$2/s;
$a =~ s/(^.*)\<li\>(.*$)/$1\<li class\=\"a\"\>$2/s;
144140
2016/04/30(土) 11:39:47.11ID:DNyH92Gg すみません。
新たな問題が発生しました。
<ul>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li>あ</li>
</ul>
<ul>
<li>い</li>
<li>い</li>
<li>い</li>
<li>い</li>
<li>い</li>
</ul>
上記の文字列が$aに入っている場合で、各<ul>の最後の<li>だけ<li class="a">に置換したいです。
新たな問題が発生しました。
<ul>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li>あ</li>
</ul>
<ul>
<li>い</li>
<li>い</li>
<li>い</li>
<li>い</li>
<li>い</li>
</ul>
上記の文字列が$aに入っている場合で、各<ul>の最後の<li>だけ<li class="a">に置換したいです。
145デフォルトの名無しさん
2016/04/30(土) 12:40:49.01ID:nOun1cZC 木構造のものを正規表現で置換するのは無理
JavaScriptのjQuery の、addClass, removeClass, toggleClass などを使う
それか、HTMLをパースする、ライブラリを探す
JavaScriptのjQuery の、addClass, removeClass, toggleClass などを使う
それか、HTMLをパースする、ライブラリを探す
146デフォルトの名無しさん
2016/04/30(土) 15:45:10.24ID:Z/JJxf61 否定の文字クラス使えば、普通に最短マッチで出来る事だろ。
s{<li>([^>]*?</li>¥s+</ul>)}{<li class="a">$1}sg
パースするライブラリ使えっつーのは同意だがな
s{<li>([^>]*?</li>¥s+</ul>)}{<li class="a">$1}sg
パースするライブラリ使えっつーのは同意だがな
147デフォルトの名無しさん
2016/04/30(土) 15:46:02.92ID:Z/JJxf61 ああ、否定の文字クラス使わんでも出来るわ。
アホだ俺
アホだ俺
148140
2016/05/01(日) 14:05:59.88ID:mZCC86OL149デフォルトの名無しさん
2016/05/01(日) 16:22:48.05ID:EJZ0zho6 そのコードそのまま(円マークをバックスラッシュにして)
動かしたから、何らかの置換↓が得られたけど?
<ul>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li class="a">あ</li>
</ul>
<ul>
<li>い</li>
<li>い</li>
<li>い</li>
<li>い</li>
<li class="a">い</li>
</ul>
無意味なエスケープは、コードの邪魔になるだけだからしない方がいいよ。
置換 s/// の右辺は正規表現ですらない(よってエスケープの必要無い)し。
動かしたから、何らかの置換↓が得られたけど?
<ul>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li class="a">あ</li>
</ul>
<ul>
<li>い</li>
<li>い</li>
<li>い</li>
<li>い</li>
<li class="a">い</li>
</ul>
無意味なエスケープは、コードの邪魔になるだけだからしない方がいいよ。
置換 s/// の右辺は正規表現ですらない(よってエスケープの必要無い)し。
150デフォルトの名無しさん
2016/05/03(火) 07:34:49.17ID:PeIabFbi \現\実 !−=≡ヘ(* - -)ノ
151デフォルトの名無しさん
2016/05/03(火) 22:19:44.35ID:u2mE3+tw /[0-9]{$num}/
のような量子数は変数にできないんでしょうか?(^^?
のような量子数は変数にできないんでしょうか?(^^?
152デフォルトの名無しさん
2016/05/04(水) 01:44:17.76ID:eTkSZ25N # 実行してみて
for $num (1..3){
$_ = '1' x ($num - 1);
print /[0-9]{$num}/ ? 'ok,' : 'not ok,';
$_ = '1' x $num;
print /[0-9]{$num}/ ? 'ok,' : 'not ok,';
$_ = '1' x ($num + 1);
print /[0-9]{$num}/ ? 'ok,' : 'not ok,';
print "\n";
}
for $num (1..3){
$_ = '1' x ($num - 1);
print /[0-9]{$num}/ ? 'ok,' : 'not ok,';
$_ = '1' x $num;
print /[0-9]{$num}/ ? 'ok,' : 'not ok,';
$_ = '1' x ($num + 1);
print /[0-9]{$num}/ ? 'ok,' : 'not ok,';
print "\n";
}
153デフォルトの名無しさん
2016/05/04(水) 17:17:13.34ID:cuRcUS6e154デフォルトの名無しさん
2016/05/04(水) 22:28:29.07ID:0wPtL/Lt $n = 2;
$pat_qr = $n + 1;
$pat_qr = qr/[0-9]{$pat_qr}/ ;
$pat_ev = eval( sprintf("qr/[0-9]{%d}/",$n+1));
$pat_co = qr/(??{ sprintf("[0-9]{%d}",$n+1) })/ ;
print( $_,"\n") foreach $pat_qr,$pat_ev,$pat_co;
# 個人的には $pat_qr がいいなぁ。eval を使うほどのことじゃないし $pat_co はデバッグしにくい。
$pat_qr = $n + 1;
$pat_qr = qr/[0-9]{$pat_qr}/ ;
$pat_ev = eval( sprintf("qr/[0-9]{%d}/",$n+1));
$pat_co = qr/(??{ sprintf("[0-9]{%d}",$n+1) })/ ;
print( $_,"\n") foreach $pat_qr,$pat_ev,$pat_co;
# 個人的には $pat_qr がいいなぁ。eval を使うほどのことじゃないし $pat_co はデバッグしにくい。
155デフォルトの名無しさん
2016/05/05(木) 15:23:19.51ID:zs5en64n # こうですよ
for $num (1..3){
$_ = '1' x $num;
print /[0-9]{@{[$num+1]}}/ ? 'ok,' : 'not ok,';
$_ = '1' x ($num + 1);
print /[0-9]{@{[$num+1]}}/ ? 'ok,' : 'not ok,';
$_ = '1' x ($num + 2);
print /[0-9]{@{[$num+1]}}/ ? 'ok,' : 'not ok,';
print "\n";
}
for $num (1..3){
$_ = '1' x $num;
print /[0-9]{@{[$num+1]}}/ ? 'ok,' : 'not ok,';
$_ = '1' x ($num + 1);
print /[0-9]{@{[$num+1]}}/ ? 'ok,' : 'not ok,';
$_ = '1' x ($num + 2);
print /[0-9]{@{[$num+1]}}/ ? 'ok,' : 'not ok,';
print "\n";
}
157153
2016/05/05(木) 19:13:26.95ID:eJss6EWw あのあのもう一つ
ファイルハンドルで3行読み込むのを作ってみたのですがうまくいきませんでした…
どうしたらよいのでしょうか…
while ( $line[0..2] = <DATA> ) {
print $line[0];
print $line[1];
print $line[2];
}
__DATA__
なんたら
かんたら
たらのめ
ファイルハンドルで3行読み込むのを作ってみたのですがうまくいきませんでした…
どうしたらよいのでしょうか…
while ( $line[0..2] = <DATA> ) {
print $line[0];
print $line[1];
print $line[2];
}
__DATA__
なんたら
かんたら
たらのめ
158153
2016/05/05(木) 19:19:01.51ID:eJss6EWw ちょっとサンプル省略しすぎてすみません。
":encoding(cp932)"
等で漢字の表示は問題ありませんm(__)m
while ( $line[0] = <DATA> ) {
$line[1] = <DATA>;
$line[2] = <DATA>;
....
のように分解して書くと問題ありません。(DATAは必ず3行一組になります)
一度に、3行読み込む方法があればお教えくださいm(__)m
":encoding(cp932)"
等で漢字の表示は問題ありませんm(__)m
while ( $line[0] = <DATA> ) {
$line[1] = <DATA>;
$line[2] = <DATA>;
....
のように分解して書くと問題ありません。(DATAは必ず3行一組になります)
一度に、3行読み込む方法があればお教えくださいm(__)m
159デフォルトの名無しさん
2016/05/05(木) 21:40:51.68ID:AhXWZZ47 @line[0..2]
配列スライスのシジルは@
配列スライスのシジルは@
160デフォルトの名無しさん
2016/05/05(木) 23:21:34.59ID:zs5en64n 都合よく固定長を前提にはできないだろうから、
# 全部読んじゃって
chomp(@_ = <DATA>);
# 3つづつ処理する
while (@line = splice(@_,0,3)) {
print map {"[$_]"} @line;
print "\n";
}
__END__
1
2
3
4
5
6
7
8
9
# 全部読んじゃって
chomp(@_ = <DATA>);
# 3つづつ処理する
while (@line = splice(@_,0,3)) {
print map {"[$_]"} @line;
print "\n";
}
__END__
1
2
3
4
5
6
7
8
9
161デフォルトの名無しさん
2016/06/01(水) 11:50:03.90ID:6wx+Ihuz $text = 'hoge<span class="hoge" id="hoge">"hoge"</span><span class="huge" id="huge">"hoge"</span>huge';
上のような文字列で<〜>(タグ内)に囲まれた"だけ
上のような文字列で<〜>(タグ内)に囲まれた"だけ
162デフォルトの名無しさん
2016/06/01(水) 11:54:16.91ID:6wx+Ihuz $text = 'hoge<span class="hoge" id="hoge">"hoge"</span>
<span class="huge" id="huge">"hoge"</span>huge';
上のような文字列(改行されてますが1行です)で<〜>(タグ内)に囲まれた"だけ " に置換したいです
s/(<.*?)"(.*?>)/$1"$2/g;
上のように試してみましたが、最初の1つのみ " に置換されるだけです
よろしくお願いします
<span class="huge" id="huge">"hoge"</span>huge';
上のような文字列(改行されてますが1行です)で<〜>(タグ内)に囲まれた"だけ " に置換したいです
s/(<.*?)"(.*?>)/$1"$2/g;
上のように試してみましたが、最初の1つのみ " に置換されるだけです
よろしくお願いします
163162
2016/06/01(水) 12:36:41.40ID:6wx+Ihuz タグの外側だけ置換する方法としては下記がどこかに載っていました
s/((?:\G|>)[^<]*?)"/$1"/g;
タグの内側だけ置換したい場合は>と<を逆にすればいいかと思ったのですができませんでした
s/((?:\G|>)[^<]*?)"/$1"/g;
タグの内側だけ置換したい場合は>と<を逆にすればいいかと思ったのですができませんでした
164デフォルトの名無しさん
2016/06/01(水) 12:56:13.02ID:UybPRljc >>161-163
$text =~ s{(?<=&lt;)(.+?)(?=&gt;)}{ $1 =~ s/&quot;/"/gr }eg;
$text =~ s{(?<=&lt;)(.+?)(?=&gt;)}{ $1 =~ s/&quot;/"/gr }eg;
165デフォルトの名無しさん
2016/06/01(水) 13:07:26.71ID:6wx+Ihuz166デフォルトの名無しさん
2016/06/01(水) 13:32:03.91ID:MHn5bFUb どんなエラーか解らないことにはなんとも……
ひょっとして、5.14 以前の Perl を使ってたりする?
ひょっとして、5.14 以前の Perl を使ってたりする?
167デフォルトの名無しさん
2016/06/01(水) 13:44:06.85ID:6wx+Ihuz >>166
5.8系です
AddHandler cgi-script-debugが使えなくなってデバッグができないんです
この文法チェッカもいつの間にか消えてました
http://homepage2.nifty.com/sophia0/perl.html
5.8系です
AddHandler cgi-script-debugが使えなくなってデバッグができないんです
この文法チェッカもいつの間にか消えてました
http://homepage2.nifty.com/sophia0/perl.html
168デフォルトの名無しさん
2016/06/01(水) 14:04:04.96ID:6wx+Ihuz teraterm入れてSSH登録してエラーチェックしてみました
Bareword found where operator expected at test.cgi line 7, near "s/"/"/gr"
syntax error at test.cgi line 7, near "s/"/"/gr "
test.cgi had compilation errors.
Bareword found where operator expected at test.cgi line 7, near "s/"/"/gr"
syntax error at test.cgi line 7, near "s/"/"/gr "
test.cgi had compilation errors.
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★10 [ぐれ★]
- 【日本大使館】中国在留邦人は安全確保を [ぐれ★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 中国で「クレしん」公開延期 対日報復、エンタメに波及 [蚤の市★]
- おで、反日分子。日中対立を利用して日本政府を苦しめることに成功。かかったなネトウヨ!! [805596214]
- ニートしかいない時間ってマジでつまんないよな
- 小池百合子「キィィ…!なんでアタシより先に総理になってンのよ…あの女狐ッ!」
- メスイキして快感が身体の内側に残ってる間に寝るのが気持ちいい
- 中国人「昔の仇を取る」「高市は狂ってる。制裁すればいい」「高市はことの重大さを認識してない」 [931948549]
- さっき突如右脇腹が猛烈に痛み出したってスレ立てた者だが救急車呼んだ
