【Perl】初心者コーナー Part18
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/11/20 22:04ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0554nobodyさん
02/12/20 00:26ID:???0555nobodyさん
02/12/20 00:38ID:Av7thQVnそのサーバ上にあるアカウントとそのアカウントパスワードで
認証させるにはどうすればいいんでしょうか?
0556nobodyさん
02/12/20 00:40ID:Av7thQVn0557nobodyさん
02/12/20 00:47ID:???http://www.hoge.co.jp/index.html //comment
のように投稿者が書いた場合、//commentの部分の色を変えたいの
ですが、どのようにしたらいいのでしょうか?
正規表現を使って、取り出した文字列をタグで挟んだ形にしてやるという
ことはわかるんですが、 //commentの部分の取り出し方がわかりません。
お教え願えないでしょうか。お願い致します。
0558nobodyさん
02/12/20 01:03ID:???perl -pe 's{\s(//.*$)}{ <tag>$1</tag>}'
http://www.example.com/index.html <tag>//comment</tag>
で、どうでしょ。
0559nobodyさん
02/12/20 01:03ID:iYZ6MU3U$str =~ s|([\s]+)(//[\S]+)|$1<tag>$2</tag>|g;
$str =~ s|^(//[\S]+)|<tag>$1</tag>|g;
こんな感じかしら。
正規表現苦手。
0560nobodyさん
02/12/20 01:42ID:4aAUDwG2レスありがとうございます。
んー、どうもうまくいかないです。
$value =~ s~([\s]+)(//[\S]+)~$1<span class="comment">$2</span>~isg;
$value =~ s~^(//[\S]+)~<span class ="comment">$1</span>~isg;
と記述してみましたが変化なしです。
どうもとりだせてないようです。
^(//[\S]+)の部分を書き換えると部分的には色が変わるのでタグはあってるんですが。
どこに問題ありでしょうか?
0561nobodyさん
02/12/20 02:00ID:p0zZgi4w0562nobodyさん
02/12/20 02:11ID:???$value =~ s/(?<!http:)(\/\/.+)$/<a>$1<\/a>/;
0563nobodyさん
02/12/20 02:11ID:4aAUDwG2ありがとうございます〜。
できましたー。これで今日はゆっくり寝られます。
>>558さん >>559さん >>561さん
ご協力ありがとうございました。
0564nobodyさん
02/12/20 02:18ID:4aAUDwG2レスありがとうございます。
なるほど、こういうふうにすればいいんですね。
バッチリです。勉強になりました。
ありがとうございました^^。
0566nobodyさん
02/12/20 11:52ID:???スクリプトを組みたいのですが、出来る限り動作の軽い物にしたいと思っています。
単純に
if(-e $ARGV[0]){
print "ok";
}else{
print "no";
}
のようにしようと思っていたのですが、-eでは他のホストのものは
調べられないそうですね。
他のホストを調べられ、かつ軽くする方法はありますか?
0567566
02/12/20 11:56ID:???それをイントラのweb上で、formにファイル名入れて確認させる形にするつもりです。
ので、実際には$ADGV[0]とかにはならないと思います。
0570nobodyさん
02/12/20 12:51ID:kZj4R1Az添え字で指定したいのですが、
ループ処理で何番目かを自分で取得するしかないんでしょうか
0571nobodyさん
02/12/20 13:13ID:???まえにココで、質問したのですが、
いま、過去ログに行っていて読めません。
もう一回質問します。
ディレクトリにある全てのファイルから
最後の3行を取り除くのにはどうすればいいでしょうか?
始めの3行ならば
% perl -ne 'print unless 1..3;' *.txt
でいいはずです。
0574nobodyさん
02/12/20 14:14ID:???ファイル読み込み
N=行数カウント
1..(N-3)まで出力
こんなスクリプトで我慢汁!
0575nobodyさん
02/12/20 14:34ID:???谷口 腕太 タニグチ ワンタ 1977年生まれ
を
谷口 腕太,タニグチ ワンタ,1977年生まれ
に置換したいです!!!
"2つめの全角スペース"→","
"4つめの全角スペース"→","
という風に置換するにはどうすればいいのでしょうか?
そんなことできますか??
0576570
02/12/20 14:51ID:kZj4R1Azありがとん
ループでやってるとさすがにコードが長くなるんで
助かったわ〜
0577nobodyさん
02/12/20 15:01ID:N/iHD9mS$test = jcode($test)->jis;
print jcode($test)->mime_encode;
はできるのに、
my $test="入力テスト";
print jcode($test)->jis->mime_encode;
すると、
Can't locate object method "jis" via package "NO%F%9%H"
って怒られる。
なぜ?
0579nobodyさん
02/12/20 17:03ID:AHOklkZ9<option>
<option selected value=$data[1]>$out[0]
<option value="0">yes
<option value="1">no
<option value="2">ok
</select>
$data[1]には0,1,2が入っていて
$out[0]にはyes,no,ok が入っています。
これを画面表示させると(仮に$data[1]=1,$out[0]=noとする)
______
|no | ←当然ながらここに<option selected value=$data[1]>$out[0]
|yes |
|no |
|ok |
~~~~~~
こんな感じで画面にでてしまうんですが。
これをfor文でまわして同じヤツは表示しないで
($data[1]=1,$out[0]=no)のときだったらselectedをつけて表示させる
______
|yes |
|no |←ここに<option selected value=$data[1]>$out[0]
|ok |
~~~~~~
こんな感じでやるにはどうしたらいいんでしょうか?
0581579
02/12/20 17:26ID:AHOklkZ9ってことです。
あと
$out[0]にyes,no,ok のどれか1つが入っている。
ってことです。
書き方がおかしくてすみません
0582nobodyさん
02/12/20 17:29ID:???それをテキストファイルとして出力するスクリプトを組んだところ、
コマンドラインから実行すると問題なく動くのですが、
phpなどから呼び出すと、out of memoryとなってしまいます。
止まるは常に同じところなのですが、一体何が原因なのでしょうか?
phpからは
system ("hogehoge.pl $a $b $c");
というように動かしています。
$a等は、formのtype=textで指定するようになっていて、
pl側で表示させて、問題なく渡せていることは確認できたのですが・・・
0583nobodyさん
02/12/20 17:31ID:???どう見てもPerlに見えないけど・・・
スマートじゃないがこんな感じ
@chknum = (0,1,2);
@chkstr = ('yes','no','ok');
$data[1] = 2;
$out[0] = "no";
$chkflg = 1;
for($i = 0 ; $i < 3 ; $i++) {
if($chknum[$i] == $data[1] && $chkstr[$i] eq $out[0]) {
$selected = "selected";
$chkflg = 0;
}
else {
$selected = "";
}
$outstr[$i] = "<option " . $selected . " value=" . $chknum[$i] . ">" . $chkstr[$i] . "\n";
}
if($chkflg) {
print "<option " . $selected . " value=" . $data[1] . ">" . $out[0] . "\n";
}
for($i = 0 ; $i < 3 ; $i++) {
print $outstr[$i];
}
ちなみに難しい処理は一つも無い・・・聞く前に自分で考えてみたのか?
0584nobodyさん
02/12/20 18:04ID:???具体的には
/home/user1/user.pass に htpasswdで暗号化したのをアップしてもらって
user1で認証しようとした場合
/home/user1/user.pass をパスワードファイルに読み込みたいのですが...
0585bloom
02/12/20 18:18ID:V4mJQRW4http://www.agemasukudasai.com/bloom/
0588579
02/12/20 20:35ID:AHOklkZ9どうもありがとうございました。
私はIDにAHOと出るくらいアホなんで
こんなのもわからないんです。
0589579
02/12/20 20:41ID:AHOklkZ9print "<option " . $selected . " value=" . $data[1] . ">" . $out[0] . "\n";
}
あと、この部分は何のためにあるんですか?
0590nobodyさん
02/12/20 20:54ID:Av7thQVn特定のディレクトリのサイズを取得するためにはどうすればいいんでしょうか?
unixプログラムならduで一発なんですが
setuidなもんで外部プログラムがうまく動かないっス
0591nobodyさん
02/12/20 21:00ID:mZ5RE2AI>>540
よろしくお願いします、、
0592nobodyさん
02/12/20 21:09ID:???0593fg
02/12/20 22:02ID:1ptZgAGxthe errors. Depending on the server configuration, you can also run this script under CGIWrap
debugging. Usually, either rename or link the script temporarily to a file which ends with .cgid
extension, or add a AddHandler cgi-script-debug .cgi line to your .htaccess file
このエラーはいったいなんでしょうか?
解読出来ませんでした。
imgboard v1.22 R6 です。
0594571
02/12/20 22:32ID:???聞いて
0595571
02/12/20 22:32ID:???0599nobodyさん
02/12/20 23:34ID:???別に難しいことじゃない。
エラーの内容自体は最初の.までだ。
後はシステムからのありがたいアドバイス。
辞書ひけ。ヴォケ。
0600546
02/12/20 23:40ID:???冗長とか言って悪い。俺は心情的な富豪的プログラミングの信奉者なんで。
>>554の出したヒントにより、3行に集約できた。
open ( IN, 'file' );
%hash = grep { chomp } <IN>;
close ( IN );
ソースは短ければ短いほどいい。と思う。
0602546
02/12/21 00:14ID:???open ( IN, 'file' );
$eval = join ( '', <IN> );
close ( IN );
$eval = '%hash = qw('.$eval.');';
eval $eval;
これなら、途中で余分な改行が入ってたり、
改行のかわりにタブや半角スペースが入っていても問題なく読み込める。
ま、そゆことで。
0603nobodyさん
02/12/21 00:20ID:???$line = '谷口 腕太 タニグチ ワンタ 1977年生まれ';
@token = split / /, $line;
$line = "$token[0] $token[1]\,$token[2] $token[3]\,4token[4]";
print $line;
# 谷口 腕太,タニグチ ワンタ,1977年生まれ
これからは、こんな糞みたいなフォーマットで記録せずに、
最初からきっちり設計するんだぞ。
0604nobodyさん
02/12/21 01:00ID:???0605nobodyさん
02/12/21 09:46ID:???名前: 谷口, 腕太
フリガナ: タニグチ, ワンタ
生年: 1977
などというデータ仕込まれてパニックに陥るんだろうな。
0606nobodyさん
02/12/21 09:57ID:94hGjCxm入力されたsjisの日本語をcryptしてパスワードを発行することに
何か問題があるのでしょうか。
文字によってサーバーエラーになるとか、
文字によって暗号化したものにセキュリティホールが発生するとか。
文字の長さは同じです。
0607nobodyさん
02/12/21 10:47ID:???0608nobodyさん
02/12/21 11:08ID:???のポート80の部分ってどうやってわかるんですか?
$ENV{hoge}でしょうか?
0609544=547=550
02/12/21 11:21ID:???普通は、ポートスキャンするしかない。と思う。
Via:に入ってたりするかもしれないけど・・・
0610nobodyさん
02/12/21 11:31ID:QdhN2u6I0611お?
02/12/21 12:00ID:SSXanoCBSSIからCGIを呼び出したらクッキーの読み書きが出来ない問題もここでお聞きしてよろしいでしょうか?
単体では動くのですが、
execでCGIを呼び出すと引数が送れないので
include virtual="cgi-bin/xxx.cgi?yyy"
で呼んでます。
0614お?
02/12/21 12:51ID:???早速のレスありがとうございます。
色々WEBで検索をかけて無理そうだとは思ったのですが、スキルの高いこちらの方々なら何か力技でも無いだろうかと思いまして。
やはり無理ですか。ありがとうございました。
>>613
私は普段javaSc切ってますので出来るだけ使いたくないんです。
0615nobodyさん
02/12/21 16:42ID:???力技ていうなら<img>タグでクッキー発行する為だけの
イメージ吐いてみる。
0616お?
02/12/21 22:34ID:???ありがとうございます。
取りあえず別の方法で逃げました。
imgタグで呼び出すのも試したのですが、他の方のスクリプトを参照して真似ても、どうも正常に動かないので投げました。
まだまだ基本が出来てません。
ありがとうございました。
0617nobodyさん
02/12/22 01:52ID:???0618lopper
02/12/22 02:19ID:iYo7T5onEncode::JP には、
$euc_jp = encode("euc-jp", $utf8);
と書いてあるが、utf8 の文字列からしか変換できんのか?shiftjis 変換は
from_to( "shiftjis", "euc-jp", $strings )
をすれば出来るが、変換元文字コードを指定しなければならん。自動で判別して
文字コードを変換するにはどうさればいいのか?
0619_gunzip ◆eiH/XdoCNg
02/12/22 03:54ID:???use Encode::Guess;
---------------------------
#!/usr/bin/env perl
use strict;
use Encode;
use Encode::Guess qw[euc-jp shiftjis 7bit-jis];
my $jpstring = "日本語文字列";
my $utf8_string = decode("Guess", $jpstring);
my $encode = guess_encoding($jpstring, qw[euc-jp shiftjis 7bit-jis]);
0620lopper
02/12/22 13:08ID:dY2TGdd7Guess モジュールって $jpstring が短い文書の場合、判別つかずに
shiftjis or euc-jp
などと返してしまうのですよね。
たとえば上記を $jpstring = '結論' とすると判断がつかず
$encode の中身は 'shiftjis or euc-jp' が入ってきます。
やっぱりそういうものですか。
0621nobodyさん
02/12/22 13:38ID:y/X/HeeKif ((-M $lockdir) * 86400 > 600)
このような処理があります。
変数の前に-Mや-Eなどを見かけるのですが、検索が掛けられませんのでこれら-をつけた英字の総称(?)を教えてください。
0623621
02/12/22 14:02ID:???ありがとうございました。
検索を掛けても2件しかヒットしなかったですが、少し情報が入りましたのでなんとか自力で調べてみます。
ありがとうございました。
0625621
02/12/22 14:23ID:???ファイルテキスト演算子で検索していますた・・・
色々詳しく解説しているサイトを見つけましたのでゆっくり勉強します。
本当にありがとうございました。
0626りゅう
02/12/22 17:29ID:9RnyP9Mxgifのグラフィックカウンターを作りたいんですけど。
全然、先が見えてきません。
どなたかご教授よろしくお願いします。
サイトを検索してもSSIのやつがほとんどなんです。
(´・ω・`)ショボーン
0627nobodyさん
02/12/22 17:38ID:???http://www.kent-web.com/count/index.html
0628nobodyさん
02/12/22 18:11ID:???てキーワードで検索かけよう。
とほほさんのgifcat.pl使うと簡単
0630nobodyさん
02/12/22 19:57ID:???本にあったサンプルを記述して動かしてみたのですが、
何も表示されません。シンタックスエラーはないですし、
記述ミスもなさそうなのですが、windows環境では
走らないのでしょうか。
<目指す結果>
[ABCABC]
[WindowWindow]
<ソース>
while (<DATA>) {
chomp;
/ (\w{3}) (\w{3}) / && ($1 eq $2) && print "[$&]\n";
/ (\w{6}) (\w{6}) / && ($1 eq $2) && print "[$&]\n";
}
__END__
ABCABCDEFG
X-WindowWindows
0631nobodyさん
02/12/22 19:58ID:???HTTP-Lite
Time-HiRes
のインストール法がよくわからないんですけど
誰か教えてもらえませんか?
0632nobodyさん
02/12/22 20:03ID:???/(\w{3})(\w{3})/ && ($1 eq $2) && print "[$&]\n";
/(\w{6})(\w{6})/ && ($1 eq $2) && print "[$&]\n";
でしょ。/ /の中の空白には意味があるよ。
0633nobodyさん
02/12/22 20:09ID:???あああああ、本当だ…。
もしあのままの記述だと、空白がないとマッチしないという事に
なるのですね。なるほど。
レスありがとうございます。とても勉強になりました。
0634nobodyさん
02/12/22 20:30ID:???http://pc.2ch.net/test/read.cgi/php/1032704121/917 マルチ
0635nobodyさん
02/12/22 21:55ID:ICjO1mQtkill INT => $pid;したいんですが。
0636yumi
02/12/22 23:28ID:???0637nobodyさん
02/12/23 00:08ID:???systemは無理だろう。execならpidは代わらないからexecする前にpid取っとけ。
つーか、普通execする前にforkしたときに親の方で取っとく。
0638nobodyさん
02/12/23 00:36ID:3vP0jNwS「ActionScript+CGIプログラミング」(ソフト バンク)ではスレッド
を立てられないのですが、少なくともデザインだけはオリジナルに
したいです。どこかにいい資料はないでしょうか?
0639nobodyさん
02/12/23 01:21ID:cOyl9Q7wどうもうまくいきません。
open GZIP, "| /usr/bin/gzip -d";
print GZIP @compressed;
こんな感じで実行してみましたが
結果が標準出力に出力されて、受け取れないです。
どうしたらいいですか?
0640nobodyさん
02/12/23 01:27ID:???0641nobodyさん
02/12/23 01:38ID:cOyl9Q7wレスありがとうございます。
なるほど、ファイルを経由させれば簡単ですね。
ですが、ファイルを経由しないで、解凍結果を受け取りたいのです。
@compress -> gzip -> file
file -> gzip @decompress
これは分かるのですが
@compress -> gzip -> @decompress
このように処理したいのです。もう一つお願いします。
0642640
02/12/23 02:06ID:???パイプ "|" を使うと内部でフォークされて子プロセスの標準出力へ吐き出される
っぽい。。。
0643nobodyさん
02/12/23 02:12ID:cOyl9Q7w0644( _。。)_ バタ。 ◆eJlUd9keO2
02/12/23 10:28ID:???単純な「フォームから送られてきたGETデータ」で躓いてます。
<FORM METHOD="GET" ACTION="ans_check.cgi" TARGET="main_disp">
<INPUT TYPE="HIDDEN" NAME="question" VALUE="001">
Ans. <INPUT TYPE="TEXT" NAME="ans">番
<INPUT TYPE="HIDDEN" NAME="dummy" VALUE="ABCDEFGHIJKLMN">
<INPUT TYPE="SUBMIT" VALUE="プレゼント開封">
</FORM>
とした時(Ansには1234と記入・・・) $ENV{'QUERY_STRING'}の中身が
question=001&ans=1234&dummy=ABCDEFGHIJKLM
と、末尾1文字(たまに2文字)抜けてる時点でなんかヤバそうなのですが、さらに
このデータに対して
@buff = split(/&/, $ENV{'QUERY_STRING'});
とした際のbuffの中身が
buff[0] = 'question=00'
buff[1] = 'and=123'
buff[2] = 'dummy=ABCDEFGHIJKL'
とさらに末尾が1文字消えてしまっているのです……。
可能性…何が考えられるでしょうか? お力添えお願い致します。
0645( _。。)_ バタ。 ◆eJlUd9keO2
02/12/23 10:34ID:???さらに buff を = で split すると・・・
($key,$val) = split(/=/); の結果
$key='questio' $val='00'
$key='an' $val='123'
$key='dumm' $val='ABCDEFGHIJKL'
と今度は分割の先頭($key)が一文字抜ける……ワケわかりません。 T−T
0646nobodyさん
02/12/23 10:41ID:???ソースを示せ。
まずはそれからだ。
どうせchopかchompを入れちまってるだけだろう。
0647nobodyさん
02/12/23 11:05ID:???#!/usr/bin/perl
$pid = open P, '-|';
die unless(defined($pid));
if ($pid) {
このブロックで受け取る
while (<P>) {
print;
}
} else {
close P;
my $pid2 = open GZIP, '|-';
die unless(defined($pid));
if ($pid2) {
このブロックで書く
print GZIP <STDIN>;
} else {
exec 'gzip', '-d';
}
}
if ($pid) {
} else {
このブロックは
close P;
open GZIP, 'gzip -d' || die;
print GZIP <STDIN>;
でもよい。
}
0648( _。。)_ バタ。 ◆eJlUd9keO2
02/12/23 11:12ID:???Σ(゜д゜ ) PHPとちがって末尾1文字なんでも消すのかッ > chop
ごめん、私が悪かった。 せっかくの休みなのにマヂでごめん。
0651nobodyさん
02/12/23 13:42ID:???『=>』
これってどういう動作をする物なんでしょうか?
宜しければ教えて下さい。お願いします。
0652nobodyさん
02/12/23 13:46ID:???0653nobodyさん
02/12/23 14:14ID:???p 10 #=>10
print("こんにちは") #=>こんにちは
0654nobodyさん
02/12/23 15:27ID:UoY7N20E■ このスレッドは過去ログ倉庫に格納されています