トップページ⇒php
1001コメント382KB

Perl コーディング初心者質問コーナー Part34

■ このスレッドは過去ログ倉庫に格納されています
0001前スレの連投で気分崩したので後よろ04/04/05 16:01ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0159nobodyさん04/04/11 22:36ID:???
さすがに>>154の釣りに騙されるやつは居ないな
016014804/04/11 22:41ID:???
>>158
この関数どこで定義されてんの?
0161nobodyさん04/04/11 22:46ID:???
>>160
ユーザーは呼べない。いい加減にしろ。
016214804/04/11 23:00ID:???
>>161
>ユーザーは呼べない。いい加減にしろ。

ならどうして調べたのさー
 。。。。。と逆切れしてみる w
0163nobodyさん04/04/11 23:31ID:???
書き方間違ってますか?

if (!-e image/$new){
mkdir("image/$new",0777);
chmod(0777, "image/$new");
}


0164nobodyさん04/04/11 23:34ID:???
間違ってます。
016516304/04/11 23:42ID:???
ミスってた・・解決しました。
理由は
if (!-e image/$new){
が
if (!-e "image/$new"){
にするのわすれてました・・・。゚(゚´Д`゚)゚。
0166nobodyさん04/04/12 02:29ID:???
>>163

if (mkdir("image/$new", 0777)) {
chmod(0777, "image/$new");
}
elsif (!-d "image/$new") {
die;
}
0167nobodyさん04/04/12 02:51ID:???
>>166
既にimage/$newがディレクトリとしてあった場合は?
0168nobodyさん04/04/12 03:42ID:???
ちょっとまってchomodする必要あんの?
0169nobodyさん04/04/12 04:10ID:???
あるわけないよね
0170nobodyさん04/04/12 06:57ID:???
鯖でumaskされてる時に意味があるんじゃ?
umask効いてる時は、mkdirのパーミッション指定が効かなかった記憶がある。
0171nobodyさん04/04/12 08:05ID:???
>>167
無問題。
0172nobodyさん04/04/12 10:13ID:???
文字列を裸で書く神経が分からん。
0173nobodyさん04/04/12 11:40ID:???
はだかぢゃいやぁーんおーしーまーやーのりっ♪
0174nobodyさん04/04/12 18:49ID:DgDkioXO
ある文章の / の前と後ろを分けて、それぞれスカラー値にしたいのですが、
(例)japan/korea どのような構文を使えばいいのでしょうか?
0175nobodyさん04/04/12 18:50ID:???
「split perl」でググってもうここには来るな。
0176nobodyさん04/04/12 18:54ID:???
エスケープ忘れにはまる予感
0177nobodyさん04/04/12 18:57ID:???
175 + \つけてもうここには来るな。
0178nobodyさん04/04/12 19:02ID:???
代入の仕方が分からずにはまる予感
0179nobodyさん04/04/12 19:38ID:???
177 + perlでは=が代入だからもうここには来るな。
0180nobodyさん04/04/12 19:42ID:???
リストとしての受け取り方が分からずにはまる予感
0181nobodyさん04/04/12 19:57ID:???
まんどくせ。
($hoge,$foo) = split /\//, 'japan/korea';
こんな感じですんでまた来てね♥
0182nobodyさん04/04/12 20:12ID:???
何だかんだ言いつつおまいら優しいですな。
0183nobodyさん04/04/12 22:06ID:???
$bagu = "表示不可能な予感";
# 侮ヲ不可狽ネ頼エ
これってもちろんPerlのバグですよね?
0184nobodyさん04/04/12 22:09ID:???
>>183
それってもちろんネタですよね?
0185nobodyさん04/04/12 22:39ID:???
>>183
「侮ヲ perl」でgoogle検索。
0186nobodyさん04/04/12 22:48ID:???
>>183
表☆示
ってやれば大丈夫!
0187nobodyさん04/04/12 22:51ID:???
教えてください。

PERLで「cgiを呼び出すHTML」を吐き出すcgi を作ったのですが
クエリーがうまくわたらないのです。

1.最初の(固定の)HTMLでは、ファイル中のクリッカブルマップからたとえば

  test1.cgi?hogehoge

をリンクしています。

2.test1.cgiでは QUERY_STRING から hogehoge を取り出し
 データファイルと照合して hogehogehoge というアイテム名を取り出してるので

 HTMLファイルに、

<A href="test2.cgi?hogehogehoge> と出力させています。

3.test2.cgi では、 QUERY_STRING から hogehogehoge を取り出すようにしているのですが

 ここで 空文字列しか来ていないようで、2.のHTMLファイルのリンクをクリックするとエラーです。

 test2.cgi は確かに呼び出しています。

一連の動作でやるとエラーなのですが、2.のHTMLが表示された段階でブラウザにソースを吐かせ、
それを別のHTMLファイルとして起動してやると、そこからのリンクでは、test2.cgi にちゃんと
hogehogehoge が渡っています。

何か設定を忘れているでしょうか?
0188nobodyさん04/04/12 23:11ID:???
<A href="test2.cgi?hogehogehoge>
         ↓
<A href="test2.cgi?hogehogehoge">
0189nobodyさん04/04/13 00:51ID:???
ちょっと教えてください。

Redhat8.0のperl5.8.0でLWP使って
レスポンスヘッダを編集したいんですが、
newの書式が分からないです。マジで。

require HTTP::Response;
$rc = '200';
$msg = 'OK';
$header = 'Accept-Ranges: bytes\n';
$header .= 'Content-Length: 186965910\n'
$header .= 'Content-Type: text/html\n\n';
$content = '';
$res = HTTP::Response->new($rc, $msg, $header, $content);

print "$res";

と書いたんですが、InternalServerErrorで進めません。
HTTP::Responseでレスポンスヘッダを編集する方法教えてください。
お願いします。
0190nobodyさん04/04/13 01:00ID:???
>>189
なんかグタグタですな。。。
use HTTP::Response;

$header =<<"EOS";
Accept-Ranges: bytes
Content-Length: 186965910
Content-Type: text/html

EOS

186 MB の HTML なんてブラクラですね。。。
019118904/04/13 01:04ID:???
>>190
お早い回答ありがとうございます。
いや、ヘッダー情報をいじったり削除したかっただけなんで、
値はどうでも良いかと思ってテキトーに設定しました。気をつけます。
0192nobodyさん04/04/13 07:51ID:???
print "ソkソ泣|";

Windowzで「ヌルポ」と文字化けします。
これってもちろんPerlのバグですよね?
0193nobodyさん04/04/13 08:21ID:OVsnEkWR
ごくシンプルな日記スクリプトをPERLで書いているのですが、
TEXTAREAの内容について改行の処理をしようとすると
数字の羅列になってしまいます。

  $msg = $FORM{'msg'}; #バッファからセット。URLデコード済。
 # $msg = ~ s/\r\n/<BR>/g;

この状態だと「$msg」の中身はちゃんと文字列になっているのですが
下のコメントをはずすと途端に数字の羅列になります。
(文字列を変えても同じ数字になります。)
どうすればこの状態を回避できるでしょうか?
0194nobodyさん04/04/13 08:29ID:???
すみません。自己解決しました
  $msg =~ s/\r\n|\r|\n/<BR>/g;
このようにコーディングしてみたらいけました。
0195nobodyさん04/04/13 10:30ID:???
>>194
試しにこう書いてみよう。
$msg = ~ s/\r\n|\r|\n/<BR>/g;

~ の意味を調べてみよう。
0196nobodyさん04/04/13 15:08ID:???
time()で返す秒数って、
何かちゃんとした名前があったような気がしたんだけど。
何だっけ。

カタカナ4文字でスがついたような気がする。
019719604/04/13 15:09ID:???
ごめん、ユリウス暦と混同している可能盛大。
名前がなかったかも。
0198nobodyさん04/04/13 15:42ID:sCIWFJ4B
HTMLに、DBに入れられたクレジットカード番号を
表示させる、ということをやっています。
番号が入っているcar_numフィールド(11番目)には
[****-****-****-****]
という形でデータが入っています。
しかし、番号確認画面でその末尾4ケタのみ表示させたいのですが、
なかなか良い考えが浮かびません。
今は以下のように書いて丸々16ケタ表示させています。
諸先輩方、アドバイスよろしくお願いいたします。

<tr>
END
if ($odr[10] == 2){
print"$odr[11]"
}
print <<END;
</td>
0199nobodyさん04/04/13 16:05ID:???
>>196
あるよ。エ・・・秒
なんだったかな思いだせん。。
020019904/04/13 16:05ID:???
わかった
エボック秒だわ
0201nobodyさん04/04/13 16:05ID:???
>>196
ヒント:シルバニアファミリーと言えばこの会社。かつてはカセットビジョンなど
家庭用ゲーム機も出していた。
020219904/04/13 16:06ID:???
ごめん。たぶんエボックじゃなくてエポック。
020319604/04/13 16:41ID:???
>>202
おー、それそれ。
お礼に自分の屁が臭い時に喜びを感じる性癖をプレゼントします。
0204nobodyさん04/04/13 16:46ID:???
>>203
それは俺の性癖だが何か?
0205nobodyさん04/04/13 18:00ID:???
dfで取得したディスク使用量のデータから一部の数字だけ
抜き出してPERLで使いたいのですが、どうすれば良いのでしょうか?
例えば

$string = "FilesystemSizeUsedAvailCapacityMounted on"

の一行から、Size, Usedだけを取り出して使いたいとすると、
@pairs = split(/(\t)/, $string);
print "@pairs[1] @pairs[2]";
としても上手く行きません。(\s)*でも無理なようです。
0206nobodyさん04/04/13 18:18ID:???
@pairs = split(/\t/, $string);
print "$pairs[1] $pairs[2]";
020720504/04/13 18:21ID:???
>>206
@pairs = split(/\t/, $string);
だと、何故か全て@pairs[0]に全文が入ってしまい、
@pairs[1]以降は空になってしまうようです。
0208nobodyさん04/04/13 18:36ID:???
>>207
$stringは本当にタブ区切りになってるのか?
020920504/04/13 18:40ID:???
何を区切りに使っているかは、良くわかりません。
shellのdfコマンド出力から一行抜いてきたstringです。
dfは何を使って区切っているのでしょう?

Filesystem 512-blocks Used Avail Capacity Mounted on
/dev/disk1s9 39870600 36823240 3047360 92% /Volumes/disk1
/dev/disk3s2 320144448 267850648 52293800 84% /Volumes/disk2
0210nobodyさん04/04/13 18:42ID:???
>>205-206
何も調べずに的外れなコードを書く奴もDQNだが、解答する奴もそれに劣らずイカレてるな。

>>205
> データから一部の数字だけ
とあるのにコードに数字が一切ないのは何故だ?

my(@data) = ($string =~ /([A-Z][a-z]+)/g);
print "$data[1], $data[2]\n";

お前の望むことはとりあえずこれで出来るが、本当にこんなことがしたいのか?

0211nobodyさん04/04/13 18:44ID:???
ざっと読んだだけだからよくわからんが
$stringを切って配列に代入しようとしてるなら
$stringをprintしてみれば何区切りかわかることだろ。
0212nobodyさん04/04/13 18:48ID:???
>>209
⊂⌒~⊃。Д。)⊃ ダァーーーッ
021321004/04/13 18:50ID:???
>>209
おいおい…(絶句)
もう何も言うまい。ほらよ。

my %data;
my @fileds = ('Filesystem', '512-blocks', 'Used', 'Avail', 'Capacity', 'Mounted on');
@data{@fields} = split / /, $string;

use Data::Dumper;
print Dumper(\%data);
0214nobodyさん04/04/13 19:00ID:???
>>213
…ハァ

split ' ', $string;
021520504/04/13 19:00ID:???
「現在、??? gbのうち??? gb使用されています」
みたいな感じの文章出力に使う用です。
0216nobodyさん04/04/13 19:06ID:???
知るかヴォケ
どうしてもperlでそれをやりたいんなら
>>1やらテンプレのリンク先で基本ぐらい勉強して来い。
0217nobodyさん04/04/13 19:08ID:???
近年まれに見る痛さだ
0218nobodyさん04/04/13 19:36ID:???
普通にできるけど?

WinXP+cygwin使用
$ df -h /cygdrive/c | perl -MData::Dumper -ne 'print Dumper split /\s+/'
$VAR1 = 'Filesystem';
$VAR2 = 'Size';
$VAR3 = 'Used';
$VAR4 = 'Avail';
$VAR5 = 'Use%';
$VAR6 = 'Mounted';
$VAR7 = 'on';
$VAR1 = 'c:';
$VAR2 = '74G';
$VAR3 = '39G';
$VAR4 = '35G';
$VAR5 = '52%';
$VAR6 = '/cygdrive/c';
021920504/04/13 19:40ID:???
@data = split ' ', $string;
で出来ました。ありがとうございます。
0220nobodyさん04/04/13 23:40ID:???
>188
187で質問した者です。

WEB動作環境は勤め先にあるので返答が遅れました。(アクセス制限がかかってるので)

ここに書いた例が間違っていて、実物はちゃんとダブルクォート閉じてました。
いろいろやってみて、どうも

A. CGIが出力したHTMをそのまま(連続で)表示した場合と、
B. それをソース表示して「保存」し、改めて表示した場合で

振る舞いが違うようです。こんなことがあるのかいなと思うのですが...

A.B.のHTMでは、hrefを使って別のCGIを引数つきで呼んでます。

そのCGIを、サーバにあった ENV.PL(環境変数を表示するやつらしい)と換えてみると
Bで表示される環境変数の多くがAでは出てこず、QUERY_STRINGもありませんでした。
(空文字列でなく、環境変数そのものが出て来ない)

ひょっとするとPERLの問題ではないかもしれませんが、スレ違いなら誘導してください。

明日はサーバーを変更してやってみます。
0221nobodyさん04/04/14 00:50ID:???
こういうことじゃないの?
x <A href="test2.cgi?hogehogehoge">
o <A href="http://〜/cgi-bin/test2.cgi?hogehogehoge">
0222nobodyさん04/04/14 02:28ID:???
>>220
当然、test1.cgiとtest2.cgiは同じフォルダにあるよね。
0223nobodyさん04/04/14 06:12ID:???
>221,222
回答ありがとうございます。
最初の例では詳しく書いていませんでしたが、どちらのCGIの参照も
http:// から記述してます。(厳密には場所は一段違うところ)

222もそういう主旨ですよね?
0224nobodyさん04/04/14 15:57ID:???
スレ違いなので↓でどうぞ

CGI: Common Gateway Interface part 11
http://pc5.2ch.net/test/read.cgi/php/1055597189/
0225nobodyさん04/04/14 19:03ID:ALtQW+6b
>224
187,220,223です。

誘導ありがとうございました。実は、サーバー変更(自分のPCでAN HTTPD走らせて)したら
問題なく環境変数が渡りました。問題のあったサーバーはNT+IISです。

どうもCGI機能まわりのようなので、あちらで聞いてみます。お騒がせしました。
0226nobodyさん04/04/14 20:57ID:1L/HDnzJ
初歩的な質問なのですが、なかなか検索できずに
こちらへ質問させて頂きます。

a.pl
b.pl

というスクリプトで、a.plからb.plへ標準出力で引数を渡し
b.plで受け取った引数を加工して、同じく標準出力で
a.plへ返すには、どうすれば良いのでしょうか?

open(FD,"./b.pl data1 data2 |");
という感じでやってみたのですが、a.pl⇒b.plへ
うまく渡されません。

どなたか、ご教授お願い致します。
0227nobodyさん04/04/14 21:06ID:???
open(FD, "| ./b.pl");
022822604/04/14 21:38ID:1L/HDnzJ
thx
0229nobodyさん04/04/15 14:38ID:???
format DATA =
@<<< @<<<<<< @<<<<<< @<<
$a $b $c $d
.
write;

で出力される物を掲示板などのhtmlに出力したいのですがどうすればいいでしょか?
print format DATA;
みたいなアホな事してみましたがやはりエラーです。
ぐぐっても該当しそうな記事がみつからないし図書館のperlクックブックは
貸し出し中・・
先輩方よろしければお助けください。
0230nobodyさん04/04/15 15:06ID:???
( ゚Д゚)ポカーン...
023122904/04/15 15:19ID:???
もしかして私はとてつもなくトンチンカンな事をしていますか?
0232nobodyさん04/04/15 17:41ID:???
>>229
format =
@<<< @<<<<<< @<<<<<< @<<
$a $b $c $d
.
write;

formatは半角スペースでレイアウトするからhtmlへ出力するなら
<pre>で囲んで使うとかしないと。
固定ピッチになって間が抜けて見えるから掲示板には向かない気がするが。
0233nobodyさん04/04/15 19:27ID:???
>>229
write FILEHANDLE
0234nobodyさん04/04/15 21:01ID:???
>>233
前後をよく見て答えましょうね
023523304/04/15 22:16ID:???
>>243
あ、writeでエラーになるってことね…。

format DATA =
@<<< @<<<<<< @<<<<<< @<<
$a,$b,$c,$d
.
$~ = 'DATA';
write;
0236nobodyさん04/04/15 22:22ID:???
フォーマット名を省略すればSTDOUTと見なされるんだからそんなことしなくても
0237nobodyさん04/04/16 03:04ID:OgytMPQd
無名ハッシュのキー一覧を得たいんですがどうやればいいのでしょうか?
key $hash
key %$hash
と色々やってみたのですが 「keyの引数はハッシュじゃないとダメ」とエラーになります
0238nobodyさん04/04/16 03:09ID:OgytMPQd
すいません、解決しました
0239nobodyさん04/04/16 03:19ID:5vM41xl8
グローバル変数の値が初期値に戻ってしまいます
なぜでしょう?
0240nobodyさん04/04/16 03:24ID:???
>>239
そうなるようなコード部分があるから
0241nobodyさん04/04/16 03:27ID:5vM41xl8
>>240
どのような記述をすると初期値に戻ってしまうのか
教えて下さいませ
0242nobodyさん04/04/16 03:35ID:???
初期値を代入した部分が再度実行されれば戻るでしょ。
そもそもそういう質問をすることからして何か勘違いしてる可能性もあるが。
0243nobodyさん04/04/16 03:45ID:5vM41xl8
>>242
役立たずですね
0244nobodyさん04/04/16 03:56ID:???
まじめに答えてるわけじゃないしな
暇つぶしなだけ
0245nobodyさん04/04/16 03:59ID:2Due2Uz0
>>244
早く寝ろ
0246nobodyさん04/04/16 04:03ID:???
おはよ
漏れは今起きた
0247nobodyさん04/04/16 04:03ID:???
はいはい、寝ますよ( ´,_ゝ`)プッ
0248nobodyさん04/04/16 05:09ID:5vM41xl8
>>247
自力で解決しました。
役立たずさんは早く寝てください。
0249nobodyさん04/04/16 06:03ID:???
どうやって解決したかは書かないのな(プゲラ
0250nobodyさん04/04/16 06:56ID:???
>グローバル変数の値が初期値に戻ってしまいます
>なぜでしょう?

これでどう解決すればいいんだよ
き違いはイラク行ってろ
0251nobodyさん04/04/16 09:58ID:???
Perlって変わってるよね。
0252nobodyさん04/04/16 10:28ID:???
そこがいいよね
0253nobodyさん04/04/16 10:33ID:???
解決してないけど苦し紛れに書いちゃったんだよ。察してやれよ
025422904/04/16 10:48ID:???
>>232
>>233
>>234
みなさん、ありがとうございました。うまく出力できるようになりました。
あれから起動hddが逝って換装後os再インストなどでご報告遅れてしまいました。

>>232
ん〜そうですねぇ。間が抜けてみえちゃいますねぇ。
一応管理用のデータ表示程度に出力させたかったので御の字なんですが
本当はこれ以外の出力のさせ方しらなかったのです。
純粋にプログラム初心者なperl初心者なのでhtmlタグの知識などもほとんどなかったり。
ほかにも出力の出し方探してみようと思います。どうもでした。
0255nobodyさん04/04/16 11:25ID:???
239 名前:nobodyさん 投稿日:04/04/16 03:19 ID:5vM41xl8
グローバル変数の値が初期値に戻ってしまいます
なぜでしょう?


240 名前:nobodyさん 投稿日:04/04/16 03:24 ID:???
>>239
そうなるようなコード部分があるから


241 名前:nobodyさん 投稿日:04/04/16 03:27 ID:5vM41xl8
>>240
どのような記述をすると初期値に戻ってしまうのか
教えて下さいませ


242 名前:nobodyさん 投稿日:04/04/16 03:35 ID:???
初期値を代入した部分が再度実行されれば戻るでしょ。
そもそもそういう質問をすることからして何か勘違いしてる可能性もあるが。


243 名前:nobodyさん 投稿日:04/04/16 03:45 ID:5vM41xl8
>>242
役立たずですね
0256nobodyさん04/04/16 11:39ID:TQSKBaOO
該当スレが見当たらなかったのでこちらに投稿させていただきます。
http://anonymouse.ws/anonwww.html
↑これみたいに、URLクリックしたら串刺さった状態で該当サイトに飛ぶようなスクリプト探してるんですが、
こんなのって普通に配布されてるんでしょうか?
だとしたらどういう検索ワードで探せばよいか教えてほしいんですけど・・・
0257nobodyさん04/04/16 12:35ID:???
>>256
>>1
http://pc5.2ch.net/test/read.cgi/php/1078568723/
0258nobodyさん04/04/16 12:37ID:???
>>252
いいこといった!
■ このスレッドは過去ログ倉庫に格納されています