Perlでリクに答えるスクリプトを作るスレ

このエントリーをはてなブックマークに追加
1(・∀・)チンポー!!
perl書きなんだがさ、こうリクに答えてなんか作りたいんだ。
だからリクエストをくれ。
>>1を抹殺してくれるスクリプト
3(・∀・)チンポー!!:04/06/02 11:44
>>2
そうカリカリすんなよ。
なんか嫌な事でもあったのか?
4デフォルトの名無しさん:04/06/02 11:48
実行EXEファイルを解析するツール作ってください
リソース抽出とか
5デフォルトの名無しさん:04/06/02 13:05
jcode.pl(or jcode.pm)&cgi-lib.plを使用しているのですが、
日本語以外(中国語とか)で書き込みされるとログファイルが壊れて
しまいます。
具体的にはnull文字とかで、すべての文字が化けて見えるようになる。

プログラムは〜
require './cgi-lib.pl';
&ReadParse(*form);
$value = $form{"namae"};
require './jcode.pl';
&jcode'convert($value, "sjis", "", "z");

open LOG_SAVE,">>$logfile_name";
print LOG_SAVE $value."\n";
close LOG_SAVE;

として、抽出&エンコードしてるのですが、どのようにすればよいでしょう?

↓参考として、このへんの文字を適当にこぴぺして確認しています。
http://www.fenglin.info/www/home.php
6デフォルトの名無しさん:04/06/02 13:14
jcodeでコード変換してもだめ?
7(・∀・)チンポー!!:04/06/02 13:35
早速クレクレ君と丸投げ厨の隔離スレとして有効に機能しだしたようだな。
8(・∀・)チンポー!!:04/06/02 13:42
壮大なプロジェクトのはじまりと汁物はいまい
9デフォルトの名無しさん:04/06/02 14:28
>>1
Hello, world!
を標準出力に出力するスクリプトを書いて下さい
10デフォルトの名無しさん:04/06/02 14:29
ヴァカでも出来るプログラミング言語を作ってくだすぃ>>1
甘いな。本当のバカには1行のコードも書けんよ。
ゲームの専門学校に通ってるやつらはそうらしい。
12デフォルトの名無しさん:04/06/02 14:49
\1\2\3\4\5\6\7\8\9
13(・∀・)チンポー!!:04/06/02 15:10
なんかもっといいネタないのーなるだけ簡単なのでさー

仕事がひまでこまってんだYO
14デフォルトの名無しさん:04/06/02 15:23
本当に暇だったら簡単じゃない物を作る
RSA暗号を10秒くらいで解くやつ頼む。
成功報酬ははずむから。
>15
ふつうに賞金もらえんじゃん
175:04/06/02 16:30
>>6
jcodeでコンバートしてます。

ある程度はいけるのですが、こういうのがだめです。

74728] 主题: 重量級軟件下載大集合
18デフォルトの名無しさん:04/06/02 17:29
>17
じゃひっかかりそうな文字置換しとけ
19デフォルトの名無しさん:04/06/02 17:43
しとけって誰に向かっていってんのじゃあ
>17
ではひっかかりそうな文字を置換してみていただけますか?
フリーでperl2exe
22デフォルトの名無しさん:04/06/02 18:50
Perlって何?果物?
とってもとってもともえ〜
24デフォルトの名無しさん:04/06/02 21:03
PDFJが入ってないレンタルサーバで、
CSVファイルをPDFに整形してプリントするようなスクリプト作ってクレクレ
>>22
宝石
26(・∀・)チンポー!!:04/06/03 01:32
駄スレになってる…
>>26
最初からだと思うが。
28(・∀・)チンポー!!:04/06/03 02:59
>>27
じゃぁなんかいいネタ考えてくれよ!
必要とされてないスレなんだよ。
でなければ、自分で盛り上げろ。禿げ
ネタねえんならとりあえず使える正規表現でも教えてくれよ。
31(・∀・)チンポー!!:04/06/03 11:56
>>30
ぐぐれ禿
つーかさー
http://www.excite.co.jp/world/chinese/
とかで>>17を繁体字で訳してみるとさー

…何するつもりですか?(笑)
33デフォルトの名無しさん:04/06/04 01:38
(・∀・)チンポー!!

とりあえずこいつを殺すスクリプト考えてみ?
34デフォルトの名無しさん:04/06/04 08:43
>>32
いや、手っ取り早く知ってる中文でググって出てきたサイトに載ってたやつなんで
あんまり気にしないでね。
というか中国は国を挙げての複製大国なので、気にしない気にしない。

それより文字化けの件、自己解決しました。m(_ _)m
35(・∀・)チンポー!!:04/06/04 10:49
>>34
自分で解決しちゃったのかよっ!!
スレの存在意義がなくなっちゃたよっ!!
だから存在意義なんて、最初からないんだって。
ここでやはり>>2ですよ。
キーボードから整数値を入力して >>1 を抹殺するプログラムを作れ。
39(・∀・)チンポー!!:04/06/07 09:10
殺人教唆で訴えてやる!
そういう風に大人が「抹殺」とか「殺す」とか簡単に言ってるから
小学生がカッターナイフですよ。
40えさ:04/06/07 10:53
まじ本気でお願いしてます。

指定したフォルダの中のファイル名と更新時刻(年月日時分秒まで)の一覧を
ファイルに出力するスクリプト。

>>40
ファイルの情報を取得するには stat 関数
ディレクトリの一覧を得るには glob("*")

ここで質問する前に最低限 Perl の教科書を一冊くらい買っておきなさい。
厨房はオネンネのじかんです。
glob("*") じゃ dot file が拾えねーべ
お前らみたいな低脳スプリクターに使える物が書けるわけ無いだろ。
44デフォルトの名無しさん:04/06/07 16:48
>>43
君みたいな低脳スクリプターに使える物が書けるわけ無いだろ。
45(・∀・)チンポー!!:04/06/08 12:24
opendir( DIR, "./directory name/" );
@files = readdir( DIR );
closedir( DIR );

ほれ。これでファイル一覧を配列に取得できるぞ。
あとはてきとーにやれ。
一日かかったんですか?
一生懸命作ったんだろうからそう言ってやるなよ。
48(・∀・)チンポー!!:04/06/08 13:47
久々に来たんだからそゆこといっちゃヤ━━━━(゚∀゚)━━━━!!

            _−==−一       :−−
           /;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\ ーー__  ̄ ̄///
          /| ::::::::/7;;;;;;;;;;;;;;;;;;;;;;;;;;;; \      ̄一,///
        /...ヽ:::::::::::|;;;;;;;;;;;;;;;;;;;;;;;....... .\ ̄ー_ ..///
       / /  \:::/;;;;;;;;;;;;;;;;  _,−〜ヽヾ   ヽ///
       | ./     /;;;;;;;;;;;;::_/_______~~~~||    ///  ∧∧∧∧∧∧∧∧∧∧∧
       | |     /;;;;;;;;;;;;;;;:/M〜、------;| :|  .///  <                >
       ||    /;;;;;;;;;;;;;;;:/.| |:~:: .~`-----: ::::|...///   < F u c k s o R e e n a!>
        `  /;;;;;;;; / ;;;|| |; r"~`v;:rv~`;l";;;;;;..///    <                >
         ∠--"  .;;;;;;;.||l.|ゞ``^”:i |i`~/|::::;;;;///ヘ     ∨∨∨∨∨∨∨∨∨∨∨
      / |\___  .;;;;;;;|.| ||ミミ;;|mmrl「"/iヽ///| |
     /;;;;;; ノ/ ◆\  ;;;;;|| |、ヾiiiiiiirノ/::ヾヾヽ;;;;;丶\
    /;;;;;;;; //◆◇◆ヾ_..| f";;;;ヾ` ̄~/:::ヽ"ヾ"ヽ::◆ヽ\
   ノ.::::::: /人ヽ◆◇◆|丶_ヾ;;;;;`}{_;::: //ヾ"ヾヽ;;;;;◇ヽ\
  /:::::::::::;/::::::::::\ヽ◆◇|;;;;;;;;;;;;;;;;;;;;;;ノ~\///◆ヾヽ()ヽ/;;;;;;;;ヽ
  `ソ,/;;;;;;;;;;;;;;;;;/ヽヽ◆|~~~~~~~~~/| |ヽ///◇◆ヽゝノ|;;;;;;;;;;;;;:::\
   γ;;;;;;;;;;;;;;;;;;/;;;;;;;;ヾヾ;||~~~~~~~/~...| |.///◆/;;;;;;;ヽ ..| ;;;;;;;;;;;;;;;;;ヽ
  /;;;;;;;;;;;;;;;;;;;;;;;/;;;;;;;;;;;;;;;;;ヽ|~~~/~ ....| ///:|/::::::::::::::::::ヾ/|;;;;;;;;;;;;;;;;;;;;;|
 /;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|~/~ .......|///::::| :;;;;;;;;;;;;;;;;;;;;;;;;ヾヽ;;;;;;;;;;;;;;;;;|

††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††
50SimpleHTTPD.pl:04/06/09 01:07
#!/usr/bin/perl
use IO::Socket;
$SIG{CHLD} = sub {wait()};
$main_sock= new IO::Socket::INET(LocalHost => 'localhost',
LocalPort => 9999,
Listen =>5,
Proto => 'tcp',
Reuse => 1,
);
$Dfile="index.html";
while($new_sock = $main_sock->accept()){
select($new_sock);
$ |= 1;
select(STDOUT);
$pid = fork();
die "Cannot fork: $!" unless defined ($pid);
if($pid == 0){
while(defined ($buf = <$new_sock>)){
print $buf;
if($buf eq "exit"){close $new_sock}
if($buf=~/^GET\s/){
$buf=~s/^GET\s\/(.*)\sHTTP\/1.\d/
$1/x;
$Dfile=$buf;
print "File $Dfile\n";
51Dream☆ ◆hG4XfSMGTg :04/06/09 01:10
}
if($buf=~/^\r\n$/){
print $new_sock "HTTP/1.1 200 OK\r
Server: Apache/2.0.40 (Red Hat Linux)\r
Accept-Ranges: bytes\r
Connection: close\r
Content-Type: text/html; charset=ISO-8859-1\r
\r\n\r\n";
open(FILE,$Dfile);
while(<FILE>){
print $new_sock $_;
}
close($new_sock);
}
#else{print $new_sock "HTTP OK $buf\r\n";}
}#while <>

exit(0);
}#pid
}#while sock
close($main_sock);
52Dream2 ◆hG4XfSMGTg :04/06/09 01:12

                   やっちまえーー!!
              (⌒∧_∧          ,//∧_∧
           バキィ!ヽ( ・∀・)  :(⌒ミ(  //(´∀` )
            バキィ!!ヽ  l| |l(:;;:( ドガァ!!///ヽ、  _`ヽゴスッ!!
           ('⌒;ヾ / '/ li| l!グシャァ!!\从从///'ミ_/ヽドゴッ!!
            (⌒)y'⌒;ヾ从从(⌒〜∵;)´⌒`つ,;(´(´⌒;"'ボキボキボキッ
           (´⌒ー-   ;:#∧_;/// 彡(:::゜;。(;;;)、⌒从;;ノ・`⌒);
         (´;⌒(´⌒;;' ~ヽと;;;;。#;;、ミ,,:,,;;;ヽ/ノ:#`""^ヾ⌒));
           ̄ ̄(´⌒;,(´,(゙゙゙'゛""゙゙)゙'';"(´⌒;,(´,(´⌒;)
                        ↑>>1

                      ギャアアーー
53(・∀・)チンポー!!:04/06/09 11:10
おいおい。
おまえら荒れるなよ。
こっちはおまえらの夢を叶えてやるんだからよぉ。

なんかなーいなんかなーい?ねぇ!お母さん!!
なんてかわいそうな >>1 なんだろう……。
55(・∀・)チンポー!!:04/06/09 13:39
同情はよしてくれよ!

しかも今日は誕生日なんだよっ!

誰か祝ってくれ!!
  |  , ,.
  |_∧*;*。
  |ー゚)|/
  | つ
  | `〜
  |∪   ハピバス。
57デフォルトの名無しさん:04/06/09 19:31

           /  /ヽヽ__ ' ´   _____,, イ ヽ
          ,'  ,'  {_r'‐'',ニ二、ー===-‐'|l 、`、
           iヽ i //  '´  ̄`ヽヽ       l| l  i
        ,' ヽ l /  、>‐=、、      =ニヽ ! l  l
        ,' /⌒ l |  ´ /(__,!゛       `、! |  !     >>1さん
       ,' ! '^> |!   i。_oソ     , ニ、,  ノ 丿      糞スレ立てんな、蛆虫、氏ね
       ,'  ヽ ヽ     ` ─       '⌒Y, ' /       と何故言われるのか
        /   |`T 、            j     /}´       ,'^! よーく考えましょうね。
     /   l l i iヽ     i` ーァ   /ノ      / /
      /    | | i i ! \   l_/    ノ |   {ヽ  / /
     ,'    | | i iノ   丶、 __  , イ | |   l } 〃 二ヽ
    ,'    r| | '´\_  / ,' ,′  | |   |└'{_/ ,─`、
58(・∀・)チンポー!!:04/06/09 19:32
↑全然分かりません消えてください
59デフォルトの名無しさん:04/06/09 19:33
>>55
祝ってられません
↓これでガマン(・∀・)しる!

    \おーだんごーまーるまるー              /
      \    おーだんごーまーるまるー       /
   .    \         おーだんごーまーるまるー/
          ∧_∧  ∧_∧   ∧_∧
          (・∀・ )  ( ・∀・)  ( ・∀・)
         ⊂  ⊂)  (    )  (つ   つ
          (__(_)  (__)_)  (__(_)
ページにアクセスすると、警視庁へIPを送付するスクリプトをクレ!
>>55
おまえと同じ誕生日だ。縁起悪い。
>>57のAAってなに?プリキュアとかいうやつ?
63(・∀・)チンポー!!:04/06/10 18:41
>>61
なんだとぉ!?
おまえもシックスナインかぁ?
勝手に俺と同じ日に生まれてんじゃねぇこの天才野郎!
マジで哀れな >>1 だ……。削除依頼を出して、死なせてあげたほうが
いいのではないか。
65神山満月 ◆hG4XfSMGTg :04/06/11 01:29
// $shell dat2chregex.exe 1086143976.dat
// csc dat2chregex.cs
//2ch dat から リンクを抜き出すプログラム
//C♯の正規表現むずい。もっとなんとかならん?>>1
using System;
using System.Text.RegularExpressions;
using System.IO;
class Grep {
static void Main(string[] args) {
TextReader reader = null;
reader = new StreamReader(
args[0], System.Text.Encoding.GetEncoding(932));
if (reader != null) {
Regex regex = new Regex("ttp");
Regex fase4 = new Regex(@"<br>");
Regex fase3 = new Regex(@"(?<TTP>h?t?tp://[^\s]*)\s*");
string line;
string [] sta;
int i;
while ((line = reader.ReadLine()) != null) {
sta = fase4.Split(line);
for(i=0;i<=sta.Length-1;i++){
Match m=fase3.Match(sta[i]);
if (m.Success) {
Console.WriteLine(fase3.Match(sta[i]).Result("${TTP}"));
}} }
reader.Close();
}
}
}
66(・∀・)チンポー!!:04/06/11 09:28
同情するならネタをくれ!
まずおまいがなんか面白いネタ提供しろよ。
68(・∀・)チンポー!!:04/06/11 12:53
OK。んじゃお題だすわ。

布団が
#!/usr/bin/perl
use Digest::MD5;
$file=$ARGV[0];

open(FILE, $file) or die "Can't open '$file': $!";
binmode(FILE); $md5 = Digest::MD5->new;
while (<FILE>) {
$md5->add($_);
}
close(FILE);
print $md5->hexdigest, " $file\n";
$aiueo="あいうえおかきくけこ";
$kaiueo="アイウエオカキクケコ";
$hkaiueo="アイウエオカキクケコ";

#SHIFT-JIS
#82a082a282a482a682a882a982ab82ad82af82b1
#83418343834583478349834a834c834e83508352

#EUC-JP
#a4a2a4a4a4a6a4a8a4aaa4aba4ada4afa4b1a4b30a
#a5a2a5a4a5a6a5a8a5aaa5aba5ada5afa5b1a5b30a
#8eb18eb28eb38eb48eb58eb68eb78eb88eb98eba
#野口英世cceeb8fdb1d1c0a4
#石原新太郎c0d0b8b6bfb7c2c0cfba
#聖徳太子c0bbc6c1c2c0bbd2
#織田信長bfa5c5c4bfaec4b9
#豊臣秀吉cbadbfc3bda8b5c8
#徳川家康c6c1c0eeb2c8b9af
#吉田兼好b5c8c5c4b7f3b9a5
#紫式部bbe7bcb0c9f4
#光源氏b8f7b8bbbbe1
71(・∀・)チンポー!!:04/06/11 13:59
なんでだれも「ふっとんだ」の一言が言えないんだよ…
package DUMPVAR;
sub dumpvar{
my($packageName) = @_;
local(*alias);
*stash = *{"${packageName}::"};
$,= " ";

while(($varName,$globValue)=each %stash){
print "$varName ================== \n";
*alias = $globValue;
if(defined ($alias)){
print "\t \$$varName $alias \n";
}
if (defined (@alias)){
print "\t \@$varName @alias \n";
}
if(defined (%alias)){
print "\t \%$varName",%alias," \n";
}
}
}
1;
73デフォルトの名無しさん:04/06/14 11:52
「さ」…さむそんティーチャア

「ア」
2ちゃんねるに高速で書き込むスクリプトン書いてよ。
>>74
そんなのはますぞいさんにたのめよ
>>1は死んだのか・・成仏しろよ。
          >>1 __                _
       / ____ヽ           /  ̄   ̄ \
       |  | /, −、, -、l           /、          ヽ
       | _| -|  ・|< ||           |・ |―-、       |
   , ―-、 (6  _ー っ-´、}         q -´ 二 ヽ      |
   | -⊂) \ ヽ_  ̄ ̄ノノ          ノ_ ー  |     |
    | ̄ ̄|/ (_ ∧ ̄ / 、 \        \. ̄`  |      /
    ヽ  ` ,.|     ̄  |  |         O===== |
      `− ´ |       | _|        /          |
         |       (t  )       /    /      |

perl書きなんだがさ、こうリクに答えてなんか作りたいんだ。
78(・∀・)チンポー!!:04/06/16 09:58
きょーもいい天気だにゃー
79デフォルトの名無しさん:04/06/18 14:06
ところで、Perl5って標準でRS-232Cを操作できるモジュールあったけ?
80(・∀・)チンポー!!:04/06/18 17:44
あるある
perl環境(ActivePerl等)がなくてもスクリプトを使えるように
***.plをWindows上で動作する***.exeを作ってください。

perl2exeみたいなのを作っておくれ、シェアいらね
82デフォルトの名無しさん:04/06/18 19:12
>>81
C・C++が書けない
厨房がよく欲しがるツールだよなぁ
83デフォルトの名無しさん:04/06/18 19:27
>>82
作れねーんなら黙ってろハゲ!
84デフォルトの名無しさん:04/06/18 22:45
スキンヘッドですが何か?
ttp://x1.shinobi.jp/iga/login.cgi?id=0000005&passwd=008hYIH
上記「アクセス解析」の左上「生ログ」をExcelで使用できるデータに
変換したいのです。以下のような形式です。
「項目1」「\s」「値」「,」「項目2」「\s」「値」「,」...「項目14」「\s」「値」「改行」

1件当たりの総項目数は14件と決まっているのですが、
各件で吐き出される項目はマチマチで項目自体が無い場合があります。
項目をあらかじめ設定しておき、正規検索で改行などを取り除きつつ、
検索がマッチした場合には項目ごとに値を入れ、項目の値が項目自体が
無い場合にも - などを入れるようにして総項目数が揃ったデータにしたい
ということです。どのようにすればできるでしょうか?
よろしくお願いします。
8685:04/06/19 04:44
各項目は具体的に以下のものです。

2004/06/17 18:11:30 ・(注:日付時刻です)
ページ         (注:解析対象ページのこと)
ページ回数
サイト回数
前回
初回
モニタ
JavaScript
Cookie
HTTP_REFERER
HTTP_USER_AGENT
国/言語
REMOTE_HOST
Proxy情報
8785:04/06/19 04:44
これに対して生データの例は

2004/06/17 18:11:30 ・
ページpxpxpx
ページ回数39 サイト回数39 前回2004/06/16 23:27:02 初回2004/06/16 0:59:36
モニタ1024 x 768 x 16bit JavaScriptTrue CookieTrue [extract]
HTTP_REFERERブックマーク
HTTP_USER_AGENTMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.23 [ja]
国/言語日本語
REMOTE_HOSTfllllp000.xxx.xxx.ad.jp
Proxy情報△
2004/06/17 18:09:02 ・
ページ冬05
ページ回数5 サイト回数5 前回2004/06/17 10:36:47 初回2004/06/16 15:26:20
モニタ1024 x 768 x 32bit JavaScriptTrue CookieTrue [extract]
HTTP_REFERERブックマーク
HTTP_USER_AGENTMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; (R1 1.5); .NET CLR 1.0.3705; .NET CLR 1.1.4322)
国/言語日本語
REMOTE_HOSTnthkid000000.xxx.xxx.ftth.ppp.xxxx.ne.jp
2004/06/17 13:53:07 ・
ページ秋03
ページ回数12 サイト回数12 前回2004/06/17 13:01:33 初回2004/06/16 14:47:05
モニタ1024 x 768 x 32bit JavaScriptTrue CookieTrue [extract]
HTTP_REFERERブックマーク
HTTP_USER_AGENTMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; (R1 1.5); .NET CLR 1.0.3705; .NET CLR 1.1.4322)
国/言語日本語
REMOTE_HOSTnthkid011111.xxx.nt.ftth.ppp.xxxxx.ne.jp
8885:04/06/19 04:50
一応、各項目の検索置換は以下のようにしてみましたが、
あらかじめ項目を決めたものに入れていくことまでができません・・・

s/(^20)(.+)(・)(\n)/時間 $1$2$3,/g;
s/(ページ)([0-9]+)(\s\s\s\s)/\1 \2,/g;
s/(ページ回数)([0-9]+)(\s\s\s\s)/\1 \2,/g;
s/(サイト回数)([0-9]+)(\s\s\s\s)/\1 \2,/g;
s/(前回)(.+)(\s\s\s\s)/\1 \2,/g;
s/(初回)(.+)\n/\1\2,/g;
s/(モニタ)(.+)(bit)/\1 \2\3/g;
s/(JavaScript)(.+)(\s\s\s\s)/\1 \2,/g;
s/(Cookie)(.+)\n/\1 \2,/g;
s/(HTTP_REFERER)(.+)\n/\1 \2,/g;
s/(HTTP_USER_AGENT)(.+)\n/\1 \2,/g;
s/(国\/言語)(.+)\n/\1 \2,/g;
s/(REMOTE_HOST)(.+)\n/\1 \2,/g;
s/(Proxy情報)(.+)\n/\1 \2,/g;
8985:04/06/21 07:13
テキストエディタで正規表現の置換はできましたが、perlのスクリプトにできない・・・
11ステップで例外などに対応してみました。
エディタの方言で $1→\1 です。

検索/置換 になってます。

1(ページ回数)(.+)(\s\s\s\s)(サイト回数)(.+)(\s\s\s\s)(前回)(.+)(\s\s\s\s)(初回)(.+)\n/\1 \2,\4 \5,\7 \8,\10 \11,
2(モニタ)(.+)(bit)(\s\s\s\s)(JavaScript)(.+)(\s\s\s\s)(Cookie)(.+)\n/\1 \2\3,\5 \6,\8 \9,
3(HTTP_REFERER)(.+)\n/\1 \2,
4(HTTP_USER_AGENT)(.+)\n/\1 \2,
5(国\/言語)(.+)\n/\1 \2,
6(REMOTE_HOST)(.+)\n/\1 \2,
7(Proxy情報)(.+)/\1 \2
8(,)(20)(.+)(\n)(ページ)(.+)(\n)(ページ回数)/\1\n時間 \2\3,\5 \6,\8
9(^20)(.+)(\n)(ページ)(.+)(\n)(ページ回数)/時間 \1\2,\4 \5,\7
10(,)(20)(.+)(\n)(ページ)(.+)(\n)(回数\s)(.+)(\s)(前回)(.+)(\s)(前ページ)(\(JavaScript無効\))(\n)(モニタ)(.+)(\n)/\n時間 \2\3,\5 \6,\8\9,\11 \12,\14 \15,\17 \18,
11(^20)(.+)(\n)(ページ)(.+)(\n)(回数\s)(.+)(\s)(前回)(.+)(\s)(前ページ)(\(JavaScript無効\))(\n)(モニタ)(.+)(\n)/時間 \1\2,\4 \5,\7\8,\10 \11,\13 \14,\16 \17,
腐臭スレ
91(・∀・)チンポー!!:04/06/22 10:35
>>90
おまえが腐臭だよ。
なんだんだおまえは。
わざわざ「腐臭スレ」と発言することによっておまえは何を得たいのか。
それを言う事によりおまえになにか利益が発生するのか?
なぁ、>>90よ。なにか会社や学校、又は家庭で嫌な事があったのか?
彼女とケンカでもしたのか?
俺なんて最近昔の女に
「あんたに前殴られたよね。訴えるから。訴えられたくなかったら慰謝料よこしな。」
とか言われたよ…。

こんな俺でも一生懸命生きてるんだ!!

生きてるんだ!!

俺が言いたいのはそれだけだ…。
>>85-89
一気にデータを変換しようとしないでワンステップおいてみな

ログ>変数にバラして格納>エクセル用に書き出す
93デフォルトの名無しさん:04/06/28 09:08
googleを越えるサーチエンジンを作ってください。
94(・∀・)チンポー!!:04/07/20 00:18
さ、さがってるよぉ!!
誰かレス書いてよぉ!!
95デフォルトの名無しさん:04/08/06 08:06
どの携帯からでも閲覧書き込み可能な掲示板を作ってください。
96デフォルトの名無しさん:04/08/06 09:39
jcode.pmを使わずにUTF-8をSJISに変換するコードキボンヌ
97デフォルトの名無しさん:04/08/06 11:00
http://och.web2.poporo.net/cgi-bin/test/test.htm
↑のような
画像掲示板に自動で画像をアップロードするスクリプトをお願いします。
>>97
俺もそういうの前から欲しいと思ってた。
perlで作れるのかな?
9998:04/08/21 04:01
10097:04/09/15 11:34:27
私はここにいます
うpおねがいします
101デフォルトの名無しさん:04/10/03 18:30:00
文字列 (たとえば $str = "010110")
を、一文字ずつ、配列に格納していくためのルーチン
をこのように書いたのですが↓

for( $i=0; $str; $i++) {
 $str =~ s/(.)(.*)/$2/;
 $flag[$i] = $1;
}

もっとスマートに書けないでしょうか?
102デフォルトの名無しさん:04/10/03 19:04:29
>>101
substr じゃだめなの?
103デフォルトの名無しさん:04/10/03 19:14:50
>>102
しばらくぶりだったのでsubstrの存在をすっかり忘れてました。
ありがとうございます
104デフォルトの名無しさん:04/10/03 19:57:25
始めまして。現在CGI勉強中の者です。
今回、メン募を作りたくIDで振り分けたページを自動生成をするという機能が欲しくて
色々、本屋やサイトで調べてみたのですが、どれを勉強すればいいか?というところから分かっておりません。
具体的に言いますと、訪問者がサイトで個人情報を書きサーバーへ送信>サーバーからIDとPASSが送られてくる>サイトへ送られてきたIDとPASSを記入>自動生成されたページを各自でカスタマイズ
その後そのカスタマイズで更新された物をサイトメインページにて随時公開したいのですが、出来るだけオリジナルで作りたいと思っています。どのようなことを勉強すべきか教えてください。
参考までに、理想に近いサイトがあるので
よければこちらも見てください。

http://www.muzie.co.jp/
http://www.with9.com/

105デフォルトの名無しさん:04/10/08 20:03:42
初めまして、この度事情によりperl全く知らないのに
BASICやったことがあると言うだけで
datファイルからページを表示するcgiを作れと言われて
いろんなページを回って、アルゴリズムは出来たんですが
どうしてもサーバーエラーが出て動作の確認すら出来ません・・・

内容的には簡単なことだと思うのですが
data.datと言うファイルに1行ごとに,で区切られた4つのデータがあって
それを、読み込んで判断してhtmlとして出力するというものです

a1,b1,c1,d1
a2,b2,c2,d2
a3,b3,c3,d3
と言うのがずっと続いていて
ファイルを読み込んで配列に入れて、先頭から4個づつデータを取りだして
a,b,cにデータの種類コードが入っていてdに内容が入っているので
if文で判断して表示してデータが無くなったら終わればいいようなのですが

おそらくファイルのオープンとロックで引っかかってると思うので
同一ディレクトリにあるファイルをオープンして内容を読み込み
クローズして終了するような例を教えてもらえないでしょうか?

見て回ったページにある例を入れてみてもcgiエラーが出てしまったので
よろしくお願いします・・・

あと、できればプログラムが何処まで進んだのか調べる方法が有れば
教えてくださいm(_ _)m
106デフォルトの名無しさん:04/10/08 21:13:24
>あと、できればプログラムが何処まで進んだのか調べる方法が有れば
>教えてくださいm(_ _)m

…え?
107105:04/10/08 23:15:01
>>106
BASICでいえばストップ命令みたいなもので
ここまで来たら命令を止める
もしくは、ここまでは異常なくプログラムが走ったと言うことを
確認できるような方法といういみです

言葉足らずですいませんでした

あと、なんとかdatから配列に読み込めたんですが
,で区切って読み込んでくれるものかと思ってたら
1行纏めて読み込んでしまってそこではまってます・・・
とりあえず、最初の質問については自己解決しましたので
また詰まったときによろしくお願いしますm(_ _)m
108デフォルトの名無しさん:04/10/12 23:12:25
>>107
途中でprintでもしとけよ。
まったく、なんでこんな奴にまかせるかなぁ...
109デフォルトの名無しさん:04/10/12 23:33:40
>>108
BASICやったことがあるってのもハッタリだったということで。
小学生の漏れでもそれくらい気がついてたぞ。20年前だがな!(遠い目)
区切りで分けるときは split使え!それとperlの資料くらいは参照しとけ!!
http://www.orange.ne.jp/~kibita/n88/
110デフォルトの名無しさん:04/10/20 20:21:00
Windowsの山ほどあるダイアログを簡単に使えるモジュールを作ってください。
Win32::API使おうとすると、最初は入ってなかったり構造体定義したり、なんかいろいろいろいrぉ面倒です。
111デフォルトの名無しさん:04/10/22 21:26:57
perl で一定時間ごとの時刻の表示が出来るプログラムを作っています。

例えば現在時刻が 21::00 だとすると
次に表示されるのが 30分後の 21:30って具合に…

なるべくなら自分で作りたいのでアドバイスとかあったら教えてください。
すれ違いですみませんが
112デフォルトの名無しさん:04/10/23 13:25:13
>>111
現在時刻の分で場合分けすればいいと思う。
113デフォルトの名無しさん:04/11/03 02:17:54

[1]を[2]にするようなスクリプトを作りたいのですがアドバイスお願いします

[1]
中 央1丁目591 281 310 218 2丁目602 315 287 227
2丁目522 256 266 179 大字南篠崎1130 559 571 352
本 町831 396 435 301 花 崎1丁目1459 749 710 604

[2]
中央1丁目,591,281,310,218,2丁目,602,315,287,227
2丁目,522,256,266,179,大字南篠崎,1130,559,571,352
本町,831,396,435,301,花崎1丁目,1459,749,710,604
114デフォルトの名無しさん:04/11/05 12:14:09
>>113
s/(\D)(\d)/$1 $2/g;
s/ /,/g;
s/(\D),(\D)/$1$2/g;
とかどうかな。駄目ですか。そうですか。
115デフォルトの名無しさん:04/11/05 21:03:20
>>114
ありがとうございます。
解決できそうです。
116デフォルトの名無しさん:04/11/05 23:14:56
>>115
おいコラ!
他スレで解決済みじゃないのかよ
これだからマルチ質問はやめれってことなんだよ
117デフォルトの名無しさん:04/11/08 20:19:59
http://pc5.2ch.net/test/read.cgi/software/1095411685/
の37なのですが、ここに転載するのはマルチになりそうで怖いのですが
本家はこちらな気がしましたので書き込ませて下さい。
(刷れ汚しになりそうなので本文は書きません)

参照して作成して下さる

P e r l の 神 
とゆう猛者の光臨を待ち焦がれてしまいます。

住人の願い叶えてたもう。お願いします
    ヾ
 (´Д`;)、  コノトオリデス
   ノノZ乙
118デフォルトの名無しさん:04/11/27 03:48:57
神など存在しない
119デフォルトの名無しさん:04/12/04 12:37:35
よし、俺もリクに答えて作ってやるage!
但し、CGI限定な
120デフォルトの名無しさん:04/12/04 18:41:32
プログラム技術@2ch掲示板

中略

プログラム・ソフトの使い方は PC 初心者板やソフトウェア板へ。
ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
Javascript は Web 制作板、CGI は Web プログラミング板へ。
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


121デフォルトの名無しさん:04/12/04 19:02:09
>>120
ウェブP板にこんなスレをわざわざ立てるのかと(ry
122デフォルトの名無しさん:04/12/04 19:18:59
Perl::Tk用のGUIエディタ作ってください。
123デフォルトの名無しさん:04/12/10 21:48:46
なんか厭味な摺れだな
124(・∀・)チンポー!!:04/12/16 15:37:20
>>117
それくらいすぐ作れるべ
125デフォルトの名無しさん:04/12/16 16:18:13
>>124
>>118へのレスだったら面白かったな。
126117:04/12/19 20:25:33
返信遅れてしまってごめんなさいです。神などいないで
やる気あぼーん。諦めモード入ってました。

>124様
本当ですか。神!!光臨して下さったら末代まで
称えます。

近代WindowsGUIの提供する
素晴らしき(手作業がでふぉの石器時代みたい)
なエクスペリエンスに疲れますた。

システマチックに自動化された環境!!
それは未知のエクスペリエンス。

未知のエクスペリエンスしたいです。
きっとソフト板の多くのユーザーが未経験な
エクスペリエンス。対話しないとなんにも
出来ない、OPいないと動かないPC環境脱却したい
し、使った人も驚くと思います。

なので是非作成して欲しいです。
ネタじゃなくて期待してしまいます。

127デフォルトの名無しさん:04/12/19 21:20:10
これがネタじゃないならなんだというのだ。
128117:04/12/19 23:59:51
ネタじゃないなら神!!

ネタならまぁ、あれだ、その。。。。。
うぇーん。
129デフォルトの名無しさん:04/12/25 11:59:52
二点を結ぶ半径rの円弧で、始点から終点までの移動をiX,iY
廻り方をccwだとした時、始点から見た円弧の中心x0,y0を求める。
ただし、ccwは、時計回りが-1、反時計回りが+1
半径rがプラス値のとき近回り、マイナスのとき遠回りの円弧で、
円弧が丁度半円の時は正負どちらでもよい。

って、いうスクリプトをperl5.004対応で、お願いします。m(_ _)m

sub quest_arc_center($$$$){
my($iX,$iY,$r,$ccw) =@_;
my($x0,$y0);
# ここをプリーズ
return ($x0,$y0);
}

ex)
my($iX,$iY,$r,$ccw) =(5,5,5,-1);
my($x0,$y0) =quest_arc_center($iX,$iY,$r,$ccw);
print "x$x0, y$y0\n";
=> x5.000, y0.000
130129:04/12/25 12:06:22
以下に私が作った情けないスクリプトを晒します。(⌒〜⌒ι)
皆様のお知恵を拝借して、洗練されたスクリプトに変えたいと思います。

use strict;
# my($x0,$y0) =quest_arc_center($iX,$iY,$r,$ccw);
sub quest_arc_center($$$$){
my($iX,$iY,$r,$ccw) =@_;
die '半径0' unless( $r+0 );
my$R =abs($r);
my$Dia = 2*$R;
my$Line = sqrt( $iX**2 + $iY**2 );
die '半径が小さい' if( $Dia < $Line );
my$PI =abs(atan2(0,-1));
my($Xhf,$Yhf) =($iX/2,$iY/2);
my($I,$i,$J,$j);
131129:04/12/25 12:07:01
つづきです。

unless( $iY+0 ){
($I,$J) =( $Xhf, sqrt( $R**2 - $Xhf**2 ) );
($i,$j) =( $I, -$J );
}else{
my$XvY = $iX / $iY ;
my$ey = - $Yhf - $XvY*$Xhf;
my$ev = 2*( $XvY**2 + 1 );
my$ex = 2*$XvY*$ey;
my$er = $ey**2 - $R**2;
my$es = 0;
$es = sqrt( $ex**2 - 2*$ev*$er ) if( abs($Dia-$Line) > 0.002 );# 180°以外
$I = ( -$ex + $es )/ $ev ;
$i = ( -$ex - $es )/ $ev ;
$J = $Yhf + $XvY*$Xhf - $XvY*$I ;
$j = $Yhf + $XvY*$Xhf - $XvY*$i ;
}
my$rad =atan2($iY-$J,$iX-$I) - atan2(-$J,-$I);
if($rad<0){ $rad = $rad - $PI }
else{ $rad = $PI - $rad }
($I,$J) =($i,$j) if( $r*$rad*$ccw < 0 );
for($I,$J){ $_ =sprintf("%.3f",$_) };
return( $I, $J );
}
132デフォルトの名無しさん:04/12/25 12:54:50
>>91
>「あんたに前殴られたよね。訴えるから。訴えられたくなかったら慰謝料よこしな。」

よく考えたら、どの道お金払うことになってしまい
脅しにはなっていないような・・・
133デフォルトの名無しさん:04/12/25 12:58:33
>「あんたに前殴られたよね。訴えるから。訴えられたくなかったら慰謝料よこしな。」
最近はカス見たいな女もいるんだな
言葉は悪い、腹も黒い
特にあいつらの負けん気満々の目が嫌だ
自分以外は「キモイ」で即斬
「誰にも迷惑かけていない」などの
自分正当化議論(屁理屈)をいっぱい持っており
危なくなるとそれを持ち出してくる
134129:04/12/25 17:08:17
perl関連で、目的のスレはこちらと思いカキコしたわけですが、
なにぶん、過疎のような気がいたしまして別スレに誘導のつもりで、
カキコしたものにレスがついてしまいました。
私が「レスはこちらで」と書き加えなった為です。

今後は↓に移ります。ごめんなさい。

Perlについての質問箱 14箱目
http://pc5.2ch.net/test/read.cgi/tech/1101649274/l50

結果、マルチになってしまったことをお詫びします。
すいませんでした。
135(・∀・)チンポー!!:05/01/05 10:04:04
よし、久々に来たが何を作ればいいんだ!
136デフォルトの名無しさん:05/01/05 10:11:32
Webページを定期的に監視して更新状況を調べるスクリプトかいとくれや。
137デフォルトの名無しさん:05/01/05 10:29:07
Perlのデータが来たら、そのままPerlで読めるコードの文字列を吐き出してくれるのを頼む。
138デフォルトの名無しさん:05/01/05 10:33:03
スレ主はやる気あんのか?
139デフォルトの名無しさん:05/01/11 16:30:59
>>1
ブラウザ作ってくれ
140デフォルトの名無しさん:05/01/18 22:49:29
ネットからダウンロードしたものを自動的に記録するスクリプト作ってください。
141デフォルトの名無しさん:05/01/18 22:53:39
>>140が裸踊りしながら都内5kmマラソンしたら考えんこともないこともない
ま、皇居一週かな。
142デフォルトの名無しさん:05/01/27 03:15:55
画像投稿できる掲示板つくってちょ
143デフォルトの名無しさん:05/01/27 10:05:29
スレ主の脂肪のため終了しました

糸冬  ̄了
144デフォルトの名無しさん:05/01/28 10:41:00
sage放置
145デフォルトの名無しさん:05/01/28 12:41:13
■こんなCGI作ってください■
http://pc5.2ch.net/test/read.cgi/php/1102980903/
146デフォルトの名無しさん:05/01/28 21:04:00
パラメータをアドレス打って直接渡したら
動かないようにするにはどうしたらいいでつか?
147デフォルトの名無しさん:05/01/28 22:37:57
>>146
パラメータをアドレス打って直接渡したら
動かないようにするといいです。
148ゆうこりん:05/02/01 23:52:57
以下のやり方を教えてください。
1、1月1日が土曜日の平年について、曜日の入力データからその月日
をすべて表示する。
2、2つのファイル{英文と日本訳}を読み込み、行数を数えながら、
表示し、新しいファイルを作成する。
マジわからなくて困ってます!よろしくお願いします!
149デフォルトの名無しさん:05/02/01 23:58:54
>>148
こういうバカが絶対に業界に来ないようにする方法って
ないものだろうか。
150ゆうこりん:05/02/02 00:17:51
そんな事言わないでくださいよ!業界入りはしないから!
151デフォルトの名無しさん:05/02/02 09:48:52
マルチ士ね
152デフォルトの名無しさん:05/02/08 03:26:10
あるデータを箇条書きに変換するスクリプト作ってくらはいよ。
153デフォルトの名無しさん:05/02/08 03:49:22
s/データ/箇条書き/g;
154デフォルトの名無しさん:05/02/08 19:52:00
1.abc
1.1 def
1.2 gh

2.kkk
2.1 jj
2.2 aa



こんな感じに変換したいんだけど 。
155デフォルトの名無しさん:05/02/08 21:18:43
>>154
すればいいじゃない。
156154:05/02/08 22:59:12
ずっと考えてるんだけど、もうどうやって作ればいいのか分からない。
アプローチの仕方が分からないので、せめてどんなコマンド使えばできる、っていうの
だけでも教えてください。
行数表示はcat -n ファイル名だっていうのは分かってるんだけど、
それだと、1は1のグループで番号表示っていうのができないんです。
157デフォルトの名無しさん:05/02/09 00:03:10
まさにネットの愚劣に底は無し!!


158デフォルトの名無しさん:05/02/09 03:49:27
あるデータって言われてもな。
元のフォーマットも知らずに変換が出来るか、ボケ。
159デフォルトの名無しさん:05/02/09 05:10:58
>>158
あ〜あ。自分がまだ質問をしていないことに>>154氏が
自分で気づくチャンスを奪い取って、ひどいやつ!
160デフォルトの名無しさん:05/02/09 14:42:05
htmlソースから余分な部分を削除するように

#!/usr/bin/perl

while (<STDIN>) {
s/<a href=.*<dl><dt>// ;
print;
}

というスクリプトを書きました。
<a href=から始まって<dl><dt>で終わる部分までを削除するつもりでしたが
うまく動作してくれません。何か間違ってますか?
他に何かいいスクリプトがあったら教えて下さい。よろしくお願いします。
161デフォルトの名無しさん:05/02/09 15:36:55
正規表現は最大一致
162154:05/02/09 17:18:58
<ol>
<li>abc
<li>def
<li>gh
<ol>
<li>kkk
<li>jj
<li>aa
</ol>
</ol>

こういうデータを>>154のように見出しをつけて変換したいんです。
どのコマンド使えばいいですか
163デフォルトの名無しさん:05/02/09 17:21:48
>>162
lynx
164デフォルトの名無しさん:05/02/09 17:46:07
>>162
それは >>154 にならない
1.abc
2.def
3.gh
3.1kkk
3.2jj
3.3aa
だろ?
165デフォルトの名無しさん:05/02/09 17:55:51
>>164
あ、すみません、間違えてました。
>>162だと>>164になりますね。

その3の中にある、3.1とか3.2というのは、catの中にまたcatですか?

166デフォルトの名無しさん:05/02/09 18:26:44
……以後放置することを提議したい。
167デフォルトの名無しさん:05/02/09 18:28:38
>>164
> >>162
> それは >>154 にならない

はあ? 何を何にするかなんて、自由だろ。
168デフォルトの名無しさん:05/02/09 21:15:20
>>154
データの形式がそれで正しいならこんな感じでいけないかな?

while ( <> ) {
  if ( /<ol>/ ) {
    $num1++;
    undef($num2);
    next;
  }
  if ( /<li>(.+)/ ) {
    $val = $1;
    unless ( $num2 ) {
      print $num.". ".$val;
      $num2++;
    } else {
      print "\t".$num1.".".$num2.". ".$val;
      $num2++;
    }
  }
}

ちなみに、動作確認してないので。動くかどうか知らんがw

>>166 スマソ m(_ _)m


169160:05/02/10 12:29:12
>>161さん
ありがとうございます。「最大一致」ということで確認して改行も一致させるということで
以下のように書き換えました。他にもいろいろ試行錯誤すること8時間・・・
お願いします。htmlソースから余分な部分を削除するスクリプトを教えて下さい。
僕にはもう限界です・・・

#!/usr/bin/perl

while (<STDIN>) {
s/<a href=.*<dl><dt>//s ;
print;
}
170デフォルトの名無しさん:05/02/10 17:01:23
>>169
「余分な部分」だってさ(ゲラゲラ)
171デフォルトの名無しさん:05/02/10 18:52:10
何をどうしたいのか分からんw
172デフォルトの名無しさん:05/02/10 21:10:50
並列処理(分散処理)をperlで作りたいのですが、教えてくれませんか?
お願いします。
173デフォルトの名無しさん:05/02/10 22:39:43
並列処理と分散処理は違うじゃないか?

並列ならthread/pthread
分散ならrpc,soap,corbaかな

とにかく其の知識がないとperlでやろうとするなんて無理だべ
174デフォルトの名無しさん:05/02/10 22:42:29
なんでperlでやりたくなるのかがわからんw
175デフォルトの名無しさん:05/02/10 22:46:47
>>174
ちょっとした遊びでコードを書いたりするのは君には理解できないんだろうよ。
176デフォルトの名無しさん:05/02/10 22:48:47
誰もあなたの遊びを手伝いません
177デフォルトの名無しさん:05/02/10 23:11:56
ここはビジネスライクなインターネットですね。
178デフォルトの名無しさん:05/02/10 23:14:53
>>169
こんな感じ?

undef $/;
open ( IN, "test.htm" ) or die "boo!";
$data = <IN>;
close( IN );
$data =~ s/<a href=.*?<dl>.*?<dt>//gs;
print $data;
179デフォルトの名無しさん:05/02/11 10:27:51
スレッドを使ったちょっとしたスクリプトを作ってください
180デフォルトの名無しさん:05/02/11 12:43:59
>>179
つ[perldoc thread]
181デフォルトの名無しさん:05/02/15 07:58:35
URLをフォームに入れて送信するだけで、リンク先のページの<title>タイトル</title>を抽出して、
<a href="URL">タイトル</a>
という具合に自動で整形してくれるスクリプトってないですか?
モジュールは「HTML-Parser-3.36」が使えます。
182デフォルトの名無しさん:05/03/12 07:18:12
>>181
Perl使え
183デフォルトの名無しさん:05/03/12 16:06:20
むしろRuby使えよ
Perlみたいな糞言語は使うな。
184デフォルトの名無しさん:05/03/12 16:17:13
Rubyも使えない糞が何か言っています
185デフォルトの名無しさん:2005/03/23(水) 22:00:57
Rubyって何?ダサッ
186デフォルトの名無しさん:2005/03/23(水) 23:21:07
phpならfile()→正規表現→ゲチュー終了
187デフォルトの名無しさん:2005/03/24(木) 17:06:14
CGI作れ
188デフォルトの名無しさん:2005/03/25(金) 13:15:42
>>1よ、2ちゃんブラ作れ
189デフォルトの名無しさん:2005/03/26(土) 14:47:40
やだアンタ、そういう趣味ー?
今時柄付きブラなんて付けてるオンナなんて… い な い わ よ
190デフォルトの名無しさん:2005/03/26(土) 20:37:08
>>189
何だこれ
191デフォルトの名無しさん:2005/03/28(月) 01:12:33
ユーザー名と適当な紹介欄と所持金とpassを入力してアカウントを作成して、ユーザーは登録したアカウントにログインして所持金や登録情報を変更可能。
また、ユーザー一覧を見ることが出来、所持金や名前でソート可能。

見たいなのお願いします
1921じゃないけど:int 2ch =05/04/02(土) 11:30:14
暇なんで依頼があれば作れます

[無理な物]
既存CGIと違いがないもの
既存CGIの改造
大規模すぎるもの

一週間後にまとめて公開します
193デフォルトの名無しさん:int 2ch =05/04/02(土) 14:09:26
AGE
194デフォルトの名無しさん:int 2ch =5年,2005/04/02(土) 16:33:42
>>192
過去スレにいろいろあるよ。ひまつぶしに出来そうなの。
195デフォルトの名無しさん:int 2ch =5年,2005/04/02(土) 16:34:17
あ、過去スレじゃなくて過去レスだ。
196デフォルトの名無しさん:2005/04/03(日) 16:41:54
>>192
指定した数値ぶんの長さの文字列を生成するスクリプト
197192じゃないけど:2005/04/03(日) 17:15:32
&print_str_rand(9);

sub print_str_rand {
for(1..$_[0]){ printf('%c', int(rand(94)) + 32); }
}
198デフォルトの名無しさん:2005/04/03(日) 17:53:21
ゆうパックの箱サイズと料金表が基本データとして用意してあるとする。
有限個の荷物のサイズ・重量と配達地域が与えられときに、送料が最小となるための荷物の詰め込み方
(どのゆうパックの箱にどの荷物をどういう向きで詰め込むのか)を求めるプログラム。
199デフォルトの名無しさん:2005/04/03(日) 17:54:34
荷物をどういう向きってそのデータも基本データに入ってるの?
200デフォルトの名無しさん:2005/04/03(日) 17:59:05
荷物はすべて直方体で、斜めに置くことはしないとしましょう。
この場合、荷物の向きは6通りです。
201デフォルトの名無しさん:2005/04/03(日) 18:19:36
えー3通りじゃないのか・・ちょっとむずいな
202200:2005/04/03(日) 19:06:32
直方体の辺をX, Y, Zの3種類とすると、面はXY, YZ, ZXの3種類。
底面がこの3種類のどれかになるのですが、ひとつの底面について、たて向き・よこ向きの2通り出来るので、
立体の向きとしては6種類あります。

別の考え方をすると、空間のx, y, z方向に直方体の辺X, Y, Zを対応させるとすると、
例えば「YZX」と書いたら、空間のx軸と直方体のY辺が平行で、y軸とZ辺が平行で・・・という意味にすると
結局、X, Y, Z の文字列としての並べ方と直方体の向きが対応します。3文字の順列になるので6通り。

問題自体は、数学的には「すべての組み合わせを調べつくすしか解法がない」という類いものらしいです。
203デフォルトの名無しさん:2005/04/03(日) 20:53:56
類のもの「らしい」っていうのが微妙だな。

俺的には、解答として提出された詰め込み方計算プログラムよりも
その解答プログラムが「最小」の詰め込み方を正しく出力している
かどうかを検査する手法のほうが興味あるな。

「正解」を出せるかどうかは目視のコードレビューで判断するのか、
それとも機械的に適切なテストを行うのか、ほかの方法を使うのか
どうするつもりなんじゃい?

204デフォルトの名無しさん:2005/04/03(日) 20:59:30
205デフォルトの名無しさん:2005/04/03(日) 21:10:55
たとえば、置く方向決まってる奴あるけど
この問題の場合
ああいうのは考えないという方向でいいの?
206200:2005/04/03(日) 23:28:01
>>203
> 類のもの「らしい」っていうのが微妙だな。

数学的には「NP問題」と呼ばる種類の問題で、こういう詰め込みの問題では、
例えば「ビンパッキング問題」とか「ナップサック問題」というのがあります。
これらの有名な問題とは設定が微妙に違うんですが、本質的な難しさは同じなんじゃないかということで
「類いのものらしい」と(「の」が抜けてましたが)書きました。

半分ネタなので、そのプログラムが本当に正しいかの検査はおいといて、
まずは実際に計算するプログラムが先ということで。

>>205
> たとえば、置く方向決まってる奴あるけど

そういうのは考えなくていいことにします。
下の荷物が潰れるとか、そういうのも考えなくていいです。
207デフォルトの名無しさん:2005/05/04(水) 04:43:24
age
208デフォルトの名無しさん:2005/05/08(日) 16:47:32
>>192
HTML置き換え

複数のHTMLファイルに書かれているタグを置き換える
<!-- ゙File.txt゙ --><!-- // --> みたいなタグの間に゙File.txt゙の内容を書き込む

SSIだと負荷が高いので゙File.txt゙を変更した場合のみ更新したいのです。
すべてのページに同じヘッダーを付けたり著作権表示の年を一度に変えたりできるのでお願いします
209デフォルトの名無しさん:2005/05/09(月) 08:38:08
依頼age
210デフォルトの名無しさん:2005/05/10(火) 03:53:37
#動作未確認、つーかplファイルにもしてないが
require 5.8.5;
use utf8; use open ":utf8"; binmode STDIN, ":utf8"; binmode STDOUT, ":utf8";
$pat='<!--\s゙(.+)゙\s-->';
while(<STDIN> && !$_=~$pat) print;
!eof STDIN or die;
print;
open FILE,"<$1";
foreach(<FILE>) print;
$pat='<!--\s\/\/\s-->';
while(<STDIN> && !$_=~$pat){}
print;
foreach(<STDIN>) print;
211デフォルトの名無しさん:2005/05/10(火) 10:06:19
質問なんですが教えてください。お願いします。
CGIでリンク集を作れるフリーソフトをダウンロードしたのですが
検索したときに「1件〜10件を表示」などのような、いくら見つかった
という表示がしないものでした。どうしたら表示できるようになるのでしょうか?
初心者のため、まったくわかりません。よろしければ教えてください。
212デフォルトの名無しさん:2005/05/10(火) 16:36:25
自分用にカスタマイズした2ch書き込みスクリプトが作りたいんだけど、どうしたらいいでしょうか。
ちなみにサバではなくMacOSXのTerminalでPerlを動作させるつもりです。
213デフォルトの名無しさん:2005/05/10(火) 16:38:06
age2ch
214デフォルトの名無しさん:2005/05/10(火) 19:26:41
>>212
POST
215デフォルトの名無しさん:2005/05/18(水) 02:14:25
#!/usr/bin/perl

$_=$ENV{QUERY_STRING};
s/\+/ /g;
s/%([\da-fA-F]{2})/chr hex$1/eg;
eval;
216デフォルトの名無しさん:2005/05/26(木) 02:42:35
AltavistaのBabelfishという翻訳エンジン(SOAP対応)があるのですが、そこでは英語と日本語、英語とスペイン語の相互翻訳はできます。
でも僕がしたいのは日本語とスペイン語の直接の相互変換なのです。
そこで、日本語、ないしスペイン語の文字列を入力したとき自動的に英語を経由してスペイン語、日本語に翻訳するスクリプトをお願いします。

win環境で手軽に使えるインターフェースを装備してくれると非常にありがたいです。

よろしくお願いします.
217デフォルトの名無しさん:2005/05/30(月) 19:31:37
-a -b c d
-e -f g h
(以下数千万行続く)
このような数列が記録されたファイルがあります。左2列が負数、右2列が正の数です
これらの数列に関しての処理をしたいと思っています
上の例で言うところの、-aと-b、cとdをそれぞれ比較し、負数同士ならばより小さいほうを、正ならばより大きいほうを選んで、

-x y
-z w
(以下数千万行)
というような処理をしたいのです

よろしくお願いします
218デフォルトの名無しさん:2005/05/30(月) 22:46:24
自己レスですが困難で大丈夫なんでしょうか?
#!/usr/bin/perl

open(IN,"filename@ARGV");
@cmd = <IN>;
close(IN);

foreach $cmd (@cmd) {

@temp = qw( @cmd );

 if ( $temp[0] <= $temp[1] ) {
  print "$temp[0] " ;
 } else {
  print "$temp[1] " ;
 }
 if ( $temp[2] >= $temp[3] ) {
  print "$temp[2] " ;
 } else {
  print "$temp[3] \n" ;
 }
}
219デフォルトの名無しさん:2005/05/31(火) 16:16:44
動くならいいんじゃない?一般に、数千万行も一気にメモリに格納するのは
普通のマシンにはつらそうだし(不可能?)、遅くなるだろうが。
220デフォルトの名無しさん:2005/05/31(火) 21:52:51
すいません、メディアプレーヤーのプレイリストを書き換えるプログラムを書いていただけませんか?音源を移動したのでプレイリストも修正しなくてはいけなくなりました。

<media src="..\..\レンタルCD等\Antonio Carlos Jobim - Wave\Wave.mp3" tid="{7FDC9124-2E56-428E-A92B-2F64EECAECDF}"/>
<media src="..\..\レンタルCD等\Antonio Carlos Jobim - Wave\The Reb Blouse.mp3" tid="{7957C487-E402-4ED7-B164-EF08C59BFB6A}"/>
<media src="..\..\レンタルCD等\Antonio Carlos Jobim - Wave\Look To The Sky.mp3" tid="{55D5B309-0D86-4227-85DC-A74D3499BD1F}"/>
<media src="..\..\レンタルCD等\Antonio Carlos Jobim - Wave\Batidinha.mp3" tid="{EA9F7A38-6D42-4172-925C-E1DB6A8770E9}"/>

今、プレイリストは上記のようになってるんですけどこれの ..\..\レンタルCD等 を変えて絶対パスで G:音源 にしていただきたいんです。
プレイリストファイル(.wpl)は数百あって、日付順に全て読み込んでそれぞれ変えていってほしいんです。
どなたかお願いできますか?勝手言って申し訳ございません。
221デフォルトの名無しさん:2005/05/31(火) 23:49:14
>>220
えっと、【レンタルCD等】を【違法ピーコ】に変えるんだな。
簡単だ。ちょっと待て。
あれっ・・・




ttp://www.keishicho.metro.tokyo.jp/anket/thanks2.htm
222デフォルトの名無しさん:2005/06/01(水) 22:03:13
Cのソースファイルを読み込んで全ての関数を次のような書式で下記だすスクリプトを作ってください。

戻り値型 関数名(引数型);

こんな感じ。
int hoge(int, int);
223220:2005/06/02(木) 19:58:06
すいません、ダメですか??
224デフォルトの名無しさん:2005/06/02(木) 20:27:17
>>222
perl -ne "chomp; print qq($_\n) if /^\w.*\)$" foo.c
225デフォルトの名無しさん:2005/06/03(金) 01:02:52
>>222
うちで試した限りでは抽出できたがどっかまずいとこあるかもしれん

#
# test.pl infile outfile
#
open(IN,$ARGV[0]) or die("can't open $ARGV[0].\n");
open(OUT,'>'.$ARGV[1]) or die("can't open $ARGV[1].\n");
while(<IN>){
nextunless(/^\s*((\w+\s+)*[\w\*]+)\s+(\w+)\(([^\)]+)\)/); # 末尾に;つければ定義部のみ拾えるだろう
my $type = $1;
my $func = $3;
my $expr = join(' ',$4 =~ /([\w\*]+)\s+\w+[\,\s\)]/g);
$expr = 'void'if(!$expr);
print OUT "$type $func\($expr\);\n";
}
close(IN);
close(OUT);
226220:2005/06/03(金) 07:49:01
誰か作っていただけませんか?
227デフォルトの名無しさん:2005/06/03(金) 23:55:36
ディレクトリ内のファイルを日付順にソートするにはどうするんですか?
228デフォルトの名無しさん:2005/06/04(土) 16:40:14
>>225
プロトタイプ宣言をしてるとだぶるよ。
あと、引数型をvoidにしないでくれよ。
229デフォルトの名無しさん:2005/06/04(土) 18:43:12
すいません、質問です。
ファイルの各行を順に読み込んで例えば「A」を「B」に変換していくようなのは
どう書けばいいんでしょうか?
230デフォルトの名無しさん:2005/06/04(土) 20:02:35
>>220

#!/usr/bin/perl
use encoding q/shift_jis/;
use Encode;
@files = <$ARGV[0]/*.wpl>;
$dir = quotemeta qq/..\..\レンタルCD等/;
$/ = undef;
for (sort { -M $b <=> -M $a } @files) {

open(FH, "<:encoding(shift_jis)", $_) or die $!;
$content = <FH>;
$content =~ s/$dir/G:音源/g;
close FH;

open(FH2, ">:encoding(shift_jis)", $_) or die $!;
print FH2 $content;
close FH2;
}

実行時引数に.wplのあるディレクトリパスを指定汁
231225:2005/06/04(土) 20:04:05
void要らんかったから余計な
$expr = 'void'if(!$expr);
を削る。以上。あとやる気起きん。
232デフォルトの名無しさん:2005/06/04(土) 20:05:47
連投規制、バーボンに引っ掛からない2ch投稿スクリプト希望
233デフォルトの名無しさん:2005/06/04(土) 20:16:49
>>225
複数行に跨る宣言が拾えないのでは。
234デフォルトの名無しさん:2005/06/04(土) 20:29:05
>>227
こんな感じかな。更新日時でソートと解釈したけど $ctimeで作成日時、$atimeでアクセス日時にもできる。

$dirname = '.';
opendir(DIR,$dirname);
foreach my $f (readdir(DIR)){
next unless(-f $f);
my($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks) = stat($f);
$file{$mtime} = $f;# 更新から経過秒数
}
closedir(DIR);
foreach $t (sort {$file{$a}<=>$file{$b}} keys %file){ #経過秒数でソート
print "$file{$t} $t\n";
}
235デフォルトの名無しさん:2005/06/04(土) 20:43:51
ねー、みんなー、DirHandleとかFileHandleとかFile::statとかTime::localtimeとか使おうよー……。
236デフォルトの名無しさん:2005/06/04(土) 20:48:27
>>235
TMTOWTDI
237デフォルトの名無しさん:2005/06/04(土) 20:48:53
$mtime = (stat($foo))[9]

238デフォルトの名無しさん:2005/06/04(土) 20:52:27
>>234
> $file{$mtime} = $f;# 更新から経過秒数

はあ?

> foreach $t (sort {$file{$a}<=>$file{$b}} keys %file){ #経過秒数でソート

はあ?

239デフォルトの名無しさん:2005/06/04(土) 20:54:35
致命的なバグがあるじゃないか。

類まれなへぼコードだな。
240デフォルトの名無しさん:2005/06/04(土) 20:55:37
>>236
そもそもそーゆー選択肢があること自体知らんやつが多過ぎるんだけどorz
241234:2005/06/04(土) 21:08:23
こうかな。というかバカにするのは簡単だけど違ってたら訂正しておくれよ。

$dirname = '.';
opendir(DIR,$dirname);
foreach my $f (readdir(DIR)){
next unless(-f $f);
my($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks) = stat($f);
$file{$mtime} = $f;
}
closedir(DIR);
foreach $t (sort {$a<=>$b} keys %file){ #経過秒数でソート
print "$file{$t} $t\n";
}
242220:2005/06/04(土) 21:09:44
>>230
ありがとうございます!!
とても救われました。
243デフォルトの名無しさん:2005/06/04(土) 21:29:21
>>241
readdir()は'.'と'..'も返すから、grep !/^(\.*)|(\.\.)$/, readdir() などで除外しとけ。
あと %file は $file{$f} = $mtime として使う方が自然じゃね?
244デフォルトの名無しさん:2005/06/04(土) 21:43:09
書いてみた ><
my $dir = shift || '.';
opendir my $dh, $dir or die $!;

print
map{ $_->[ 0 ]."\n" }
sort { $a->[1] <=> $b->[1] }
map { [$_, -M ] }
#<*>;
grep !m/^\.\.?$/&& -f, readdir $dh;

closedir $dh;
245244:2005/06/04(土) 21:53:34
grep最初のマッチ不要だったような orz
246デフォルトの名無しさん:2005/06/04(土) 22:18:23
>>241
> こうかな。というかバカにするのは簡単だけど違ってたら訂正しておくれよ。

おまえは出てくるな。みんなの手間が増えるだけだ。
247デフォルトの名無しさん:2005/06/05(日) 05:33:05
>>246
そういう貴様も出てこなければいいだろう。
広告の裏にでも書いてろ
248デフォルトの名無しさん:2005/06/05(日) 15:13:51
普通、チラシの裏だよなぁ
249デフォルトの名無しさん:2005/06/05(日) 15:30:19
最近両面印刷が多くてなぁ。
250デフォルトの名無しさん:2005/06/05(日) 17:10:03
ツルツルで書きにくい
251デフォルトの名無しさん:2005/06/06(月) 01:58:09
消しゴムで消しにくい
252デフォルトの名無しさん:2005/06/28(火) 15:17:43
hosyu
253デフォルトの名無しさん:2005/06/28(火) 16:50:34
ALTボタンを押しっぱなしにするような命令はないですか??
 
今あるボタンを押した時と同じ効果を発揮するような
ショートカットキーを実装しようとしているのですけど、
ニーモニックキーだとALTも同時に押す必要がありますよね。
だからいちいちALTを押さなくても効果を活動できるようにしたいんです。
KeyListenerを実装するという手も考えましたが,
これだとボタンを押した時の定義と同じことを書くので
二度手間だと思い,なんとか他の方法がないかと思って
いきついたのがニーモニックキーです。
254デフォルトの名無しさん:2005/07/23(土) 10:34:38
ある文字列の中のあるHTMLタグをすべて見つけ出し、その中に特定の文字列が合った場合は、その文字列を消す。
というようなスクリプトを作りたくて悩んでいます。

例えば、あるファイル$fileの中から<font>タグを探し出して、みつかった<font>の中からweightに関する設定がされたものは、それを消して、$file中のすべての<font>からweightを消したいといった場合です。

いろいろやってみてるのですが、うまくいかない><;
255デフォルトの名無しさん:2005/07/23(土) 12:05:41
ブラウザからMSNメッセンジャーを使うスクリプト
256デフォルトの名無しさん:2005/07/23(土) 17:51:36
>>254
がんばって正規表現ゴリゴリ書くか、
HTML::Parserとか使って一度分解し、タグ・属性除去してから再構築。
257デフォルトの名無しさん:2005/07/24(日) 15:24:45
ファイルから、特定の行だけ違うファイルに出力するプログラムを作ってください。
<例>
元のデータ
A 500円 6個
B 600円 6個
A 400円 3個
C 400円 7個
B 200円 6個

処理した結果
A 400円 3個
C 400円 7個

元のデータから同じ値段のものだけを出力するみたいな感じで。
ホント初心者ですいません。

258デフォルトの名無しさん:2005/07/24(日) 15:43:06
>>257
( ゚Д゚)ポカーン
259デフォルトの名無しさん:2005/07/25(月) 20:16:12
>>256
HTML::*シリーズはいろいろあるな。この場合、HTML::Treeは如何か。
260デフォルトの名無しさん:2005/08/18(木) 18:19:34
でもモジュール使えない鯖だと困るよね。
やっぱ正規表現で書くしか…。
セッションとかRSSも使いたいけど
俺が借りてるサーバは一切不可。
多分CGI.pmくらいは使えると思うんだが
261デフォルトの名無しさん:2005/09/09(金) 22:16:45
え、そういうのは自分で無理矢理インスコするもんじゃないの?
262デフォルトの名無しさん:2005/09/17(土) 22:26:28
mp3プレーヤーが1円^^
http://news19.2ch.net/test/read.cgi/news/1126704124/

スクリプトで全部持ってかれてしまいます
スクリプトと使い方うpして下さい!
おながいします
263デフォルトの名無しさん:2005/09/28(水) 18:41:23
行の折り返し処理をしたいのですが、思い浮かびません。

A:aaa,bbb,ccc,ddd,eee,ffff;
B:jjjj,kkkk,llll,mmmm,nnnnn,oooo,pppp,qqqq;
C:rrrr,ssss,tttttt,uu,ssss,cccc,ss;

てな具合に最初の文字列だけ「:」で区切られ、次の文字列からは
「,」で区切られます。最後の文字列には「;」が付きます。
この「,」で区切られた文字列は行により文字列数が違います。
これを下記のように10文字程度ずつ改行したいのですが、どのようにすれば
よいでしょうか?


A:aaa,bbb,ccc,ddd,eee,ffff;
B:jjjj,kkkk,llll,mmmm,nnnnn,
 oooo,pppp,qqqq;
C:rrrr,ssss,tttttt,uu,ssss,cccc,
 ss;

264デフォルトの名無しさん:2005/10/05(水) 02:42:23
>263
下記のどこが10文字程度なのかが分からん。

.........1.........2.........3
123456789012345678901234567890
A:aaa,bbb,ccc,ddd,eee,ffff;
B:jjjj,kkkk,llll,mmmm,nnnnn,
 oooo,pppp,qqqq;
C:rrrr,ssss,tttttt,uu,ssss,cccc,
 ss;

265デフォルトの名無しさん:2005/10/05(水) 13:34:49
>>264
多分、全角の10文字ぐらいということだろうね。
そうすると、出力フォントの幅まで考慮するということだろうか。
266デフォルトの名無しさん:2005/10/09(日) 12:27:47
リク。

昇順にソートされた正の整数が一行に一個づつ書かれたファイルを標準入力から与えると、
その数の範囲を分かりやすく標準出力に表示してくれるスクリプトキボン。

例:
入力
1
2
3
100
101
105
出力
1-3,100-101,105
267デフォルトの名無しさん:2005/10/09(日) 16:03:48
>>266 俺頭悪いからこんなソースしか書けんわ。すまん。
#!/usr/bin/perl
$|=1;

$file = <STDIN>;
chomp $file;

open(FH, $file);
while (<FH>) {
chomp;
push @vals, $_;
}
close(FH);

$head = $vals[0];
$buf .= $vals[0];
shift @vals;
foreach $val (@vals) {
if($head + 1 == $val){
$buf .= '-';
$head = $val;
next;
}
if($val > $head + 1){
$buf .= $head.','.$val;
$head = $val;
next;
}
}

$buf =~ tr/-//s;
print $buf;
268デフォルトの名無しさん:2005/10/09(日) 16:05:07
しかもそれマトモに動かんわ・・無視してごめん
269デフォルトの名無しさん:2005/10/09(日) 16:41:22
物凄い勢いで修正

#!/usr/bin/perl
$|=1;

$file = <STDIN>;
chomp $file;

open(FH, $file);
while (<FH>) {
chomp;
push @vals, $_;
}
close(FH);

$head = $vals[0];
shift @vals;
print $head;
foreach $val (@vals) {
if($head + 1 < $val){
if($flag){ print $head; }
print ',', $val;
$flag = 0;
}
if($head + 1 == $val){
if(!$flag){ print '-'; }
$flag = 1;
}
$head = $val;
}
270266:2005/10/09(日) 17:14:55
>>269
ありがとうございます。完璧です。

標準入力に渡すのは、ファイル名じゃなくてファイルの内容のつもり
だったんですけど、これは私の依頼の文章のほうの問題ですね。
ありがとうございました。
271デフォルトの名無しさん:2005/10/09(日) 21:35:16
>>263

半角10文字で作ってみた(自信なし)

#!/usr/bin/perl
while (<>) {
while (/.{10}.*?,/) {
print "$&\n";
$_ = " $'";
}
print;
}
272271:2005/10/09(日) 21:38:21
これが…
A:aaa,bbb,ccc,ddd,eee,ffff;
B:jjjj,kkkk,llll,mmmm,nnnnn,oooo,pppp,qqqq;
C:rrrr,ssss,tttttt,uu,ssss,cccc,ss;

こうなる
A:aaa,bbb,ccc,
ddd,eee,ffff;
B:jjjj,kkkk,
llll,mmmm,
nnnnn,oooo,
pppp,qqqq;
C:rrrr,ssss,
tttttt,uu,
ssss,cccc,
ss;
273271:2005/10/09(日) 22:27:01
A:aaa,bbb,ccc,ddd,eee,ffff;
B:jjjj,kkkk,llll,mmmm,nnnnn,
 oooo,pppp,qqqq;
C:rrrr,ssss,tttttt,uu,ssss,cccc,
 ss;

A:aaa,bbb,ccc,
 ddd,eee,ffff;
B:jjjj,kkkk,
 llll,mmmm,
 nnnnn,oooo,
 pppp,qqqq;
C:rrrr,ssss,
 tttttt,uu,
 ssss,cccc,
 ss;

( ゚д゚)ポカーン
10文字だよね??

責任とれや!!!!
    _, ,_  パーン
 ( ‘д‘)
   ⊂彡☆))Д´) >>1
274271:2005/10/10(月) 08:57:36
#!/usr/bin/perl

while (<>) {
  while (/.{22}.*?,/) {
    print "$&\n";
    $_ = " $'";
  }
  print;
}

A:aaa,bbb,ccc,ddd,eee,ffff;
B:jjjj,kkkk,llll,mmmm,nnnnn,
 oooo,pppp,qqqq;
C:rrrr,ssss,tttttt,uu,ssss,
 cccc,ss;

(;゚∀゚)=3ムッハー
275デフォルトの名無しさん:2005/10/14(金) 01:32:43
TelneTでサーバにアクセスしてユーザーとパスを入れて、コマンドを打つ
その後に別のサーバーにログインするプログラムを作って
ください。お願いいたします
276デフォルトの名無しさん:2005/10/14(金) 12:21:10
telnetやTelnet、あるいはTELNETなら聞いたことがあるんだが……



TelneTか……
277デフォルトの名無しさん:2005/10/14(金) 14:40:23
278デフォルトの名無しさん:2005/10/14(金) 16:48:36
>>1 :(・∀・)チンポー!!
おまい、スレたてたんだから少しぐらいやれよ!
279デフォルトの名無しさん:2005/10/14(金) 23:27:14
ログインしているところまでは確認できるけど、WHOコマンド打たないんだよ
280デフォルトの名無しさん:2005/10/15(土) 00:42:13
……
281デフォルトの名無しさん:2005/10/15(土) 20:44:15
このスクリプトが動かないのですが何が原因ですか?
プロンプトは
Username:
password:
Router>
とういう風に変わっていきます。
Routerにログインしてwho打つとログインはしているようなのですが、
$t->cmd("ping 10.1.1.1");
のコマンドを打ってくれません。

教えてください。

#!/usr/bin/perl
use Net::Telnet;
$host='10.1.1.1';
$username='aaa';
$passwd='bbb';
$t = new Net::Telnet (Timeout => 4, Prompt => '/[a-zA-Z ]+: /', Dump_Log => 'telnet-log');
$t->open("$host");
$t->login($username, $passwd);
$t->waitfor('/[a-zA-Z]+>/');
$t->cmd("ping 10.1.1.1");
$t->waitfor('/[a-zA-Z]+>/');
$t->cmd("exit");
$t->close();
282デフォルトの名無しさん:2005/10/15(土) 20:52:45
Net::TelnetのとこのPromptも [a-zA-Z]+> じゃないの?
283デフォルトの名無しさん:2005/10/15(土) 20:54:54
あと、waitforは要らないんじゃない? promptを待つのはcmdだけでよいのでは?
284デフォルトの名無しさん:2005/10/15(土) 21:18:57
>>282
>Net::TelnetのとこのPromptも [a-zA-Z]+> じゃないの?
[a-zA-Z]+> にした場合
>Username:
に反応できなくなってしまったので:にしています

>>283
初心者のためまだ理解していないのですが、
$t->waitfor('/[a-zA-Z]+>/');
はAからZまでのローマじと>が出てきたときに次に進めという意味ですよね?

ログインするとプロンプトはRouter>になります

が、cmd以降のコマンドを打ってくれないので困っています

アドバイスください。
285デフォルトの名無しさん:2005/10/16(日) 10:58:05
すみません、教えていただきたいのですが。
買い物などのWEBで、完了まで時間がかかるとき、「ただいま登録中です」のような一時的画面を表示させたいのですが、
perlではどのような方法があるでしょうか?
javaなどでは時々このようなページを使っているとこがあるのですが。。。。
286デフォルトの名無しさん:2005/10/16(日) 11:44:31
>>285
多分きっと板違い。WebProg板で聞き直すといいよ。
あと、完了までの時間がどれくらいなのか、とか、ブラウザからのリクエストを
受け取った時点で完了までの時間がはっきりするのか、とかの情報も加えた
ほうがいいかも。
287デフォルトの名無しさん:2005/10/17(月) 00:01:32
すみません、ローカルにはてなみたいなシステム構築したいのですが参考になるページ等在れば教えてください
288デフォルトの名無しさん:2005/10/17(月) 02:44:30
>>286
ありがとうございます。ここでは×だったんですね。。。
すみませんでした。
289デフォルトの名無しさん:2005/10/23(日) 11:55:48
Linux> ping -n 127.0.0.1
Pinging 127.0.0.1 with 32 bytes of data:

Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

Linux>exit

Windows>telnet 10.1.1.1
Username:
Password:

Unix> ping -n 2 127.0.0.1
Pinging 127.0.0.1 with 32 bytes of data:

Reply from 127.0.0.1: bytes=32 time<5ms TTL=128
Reply from 127.0.0.1: bytes=32 time<5ms TTL=128

Unix>exit

上記のようなログがあり
その中からpingのリプライのtime<xmsをリストするプログラムを教えてください
出力としては
Linuxtime<1ms
Unixtime<5ms
にしたいです。
よろしくお願いいたします。
290デフォルトの名無しさん:2005/10/24(月) 16:18:05
>289
まず、最低限下記の部分ぐらい仕様をはっきりさせろ。
・各(ホストを示す?)ブロックはexitで終わる?
・Reply from行が複数あって、timeが食い違ったときどうする?
・pingが通らないパターンはあるのか?あるならその時どうする?
話はそれからだ。
291デフォルトの名無しさん:2005/10/27(木) 19:44:34
infoseek.jpにsmtp開いて単純にメール送ろうとしたら
NLだけじゃいかんといわれ
s/([^\r])\n$/$1\r\n/
s/^\n$/\r\n/
で修正して送ったら、うまくいくにはいったが、
cgiにしてサーバからおくると文字化けする。
しかも、なぜかクラッシュしてるらしく
サーバからの応答がない。
ブラウザが再送して、結果文字化けしたメールが
大量にinfoseekに残る。
これってなんで?
他のmailboxでは問題ない。
292デフォルトの名無しさん:2005/11/01(火) 12:24:02
コードさらせ。
293デフォルトの名無しさん:2005/11/01(火) 23:18:23
log1.txt log2.txt … log10.txt

というファイル名をきれいにソートしたい。

sort { $b <=> $a } @lists;

だとlog10 をうまく処理できません。

どうすればいいですか??
294デフォルトの名無しさん:2005/11/01(火) 23:19:25
ageます
295デフォルトの名無しさん:2005/11/01(火) 23:49:17
map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { /log(\d+)\.txt/; [$_,$1] } @lists;
296293:2005/11/02(水) 00:08:58
わぁ、どうも!
297デフォルトの名無しさん:2005/11/07(月) 01:59:35
298デフォルトの名無しさん:2005/11/08(火) 10:43:45
リクです。

20051108
aaa
bbb
end

20051109
ccc
ddd
end

20051110
eee
fff
end

という内容のファイル(xxx.txt)があって、標準入力に 20051109 を与えた時に

20051109
ccc
ddd
end

という部分だけを出力させたいんです。お願いします。
299デフォルトの名無しさん:2005/11/08(火) 10:56:28
#!/usr/bin/perl

$date = <STDIN>;
chomp $date;

open(FH, 'xxx.txt');
while (<FH>) {
chomp;
if($_ eq ''){
$flag = 0;
next;
}
if($flag){
print $_, "\n";
next;
}
if($_ eq $date){
print $_, "\n";
$flag = 1;
}
}
close(FH);

テキトー
300デフォルトの名無しさん:2005/11/08(火) 11:21:15
>>298
#!/usr/bin/perl
chomp($input = <STDIN>);
open XXX, "<xxx.txt";
$/="end\n";
while(<XXX>)
{
if(/^($input)/){ print $_; }
}


適当に作ったから動かないかもしれん。
301298:2005/11/08(火) 11:46:59
>>299
動きました。ありがとうございます。

>>300
^ を消すと動きました。ありがとうございます。
302デフォルトの名無しさん:2005/11/19(土) 12:00:41
PERL
303デフォルトの名無しさん:2005/11/19(土) 23:20:48
とあるperlプログラムの中に
PHPでいう
<?php
require("sample.txt");
?>
と同じ効果を付けたいのですが
どんなスクリプトにすればよいのでしょうか
304デフォルトの名無しさん:2005/11/19(土) 23:35:29
require 'sample.txt';
305デフォルトの名無しさん:2005/11/20(日) 00:00:39
>>304
それはやりたい事と違うかも。
PHPでは<? ?>内じゃ無い部分はそのまま出力
use IO::File;
my $fh = new IO::File 'sample.txt';
while (<$fh>) { print $_ }
undef $fh;
やりたい事はどっちだろね

…複合型だと言うならスクリプト部分を判別出来るようにして置いて、マッチングしてevalに放り込む
s/<\?perl(.*?)\?>/$1/ge
例えばこんな感じで
306デフォルトの名無しさん:2005/11/20(日) 00:05:13
初心者なんでなんともいえないのですが
ブラウザでxxx.phpに
アクセスして
<?php
require("sample.txt");
?>
を見ると
sample.txtの文字が表示されるんですよ
それと同じことを
xxx.cgiでもできないかなぁと思いまして

わかりにくくてすみません
307デフォルトの名無しさん:2005/11/20(日) 00:34:02


sub require2 {
my $file = shift;
308デフォルトの名無しさん:2005/11/20(日) 02:35:15
open my$o,">$file" or die;
print$o "orz"x 10**5;
close$o;
return"orz";
}
309デフォルトの名無しさん:2005/11/20(日) 22:24:32


sub require_for_vip {
 my $gold = shift;
310306:2005/11/26(土) 18:39:05
難しいですかね?
311デフォルトの名無しさん:2005/11/26(土) 18:56:33
>>310
>>305に既に答えのコードが書いてあるわけだが。
312デフォルトの名無しさん:2005/11/26(土) 19:33:04
ワロス
313306:2005/11/26(土) 20:39:48
初心者すぎてイマイチわからない自分がいる…
勉強してからこい っていう話だが
314デフォルトの名無しさん:2005/11/26(土) 20:57:29
>>313
そりゃスマンカッタ。説明がちゃんと必要だったな…
#--------------------------------
sub show_file {
my $file = shift;
use IO::File;
my $fh = new IO::File $file;
while (<$fh>) { print $_ }
undef $fh;
}
#--------------------------------
とでもスクリプトのどこかに書いておく。

で、
show_file('ファイル名');
という感じでそのサブルーチンを呼び出せば、そのファイルの中身が表示される。
パッケージが分かれていたりするとこれだけじゃ出来ないがまあその時はその時だ
IO::Fileモジュールが使えない環境ならこっち
#--------------------------------
sub show_file {
my $file = shift;
open SHOW_FILE, $file;
while (<SHOW_FILE>) { print $_ }
close SHOW_FILE;
}
#--------------------------------
315306:2005/11/26(土) 21:28:45
なんどもすみません
.cgiのなかに
HTML表示するところがあるんですけど
そこにshow_file('ファイル名');をやっても
そのまま表示されてしまうのですが
(マジ初心者で迷惑かけすぎですね
316デフォルトの名無しさん:2005/11/26(土) 22:00:54
表示をどうやってるのかによる。
単なるprint なのか、ヒアドキュメントなのか。
317デフォルトの名無しさん:2005/11/26(土) 22:09:20
${show_file('ファイル名')}
318306:2005/11/27(日) 00:26:50
printです
319デフォルトの名無しさん:2005/11/28(月) 15:27:30
誰か心優しい方、これを作ってくださいm(__)m
宿題に手づまりで助けてください!(>人<)

SQL.txtを読み込んで、gakusei.csvを読み出し、
そこからName,Addressのみを表示させるプログラムを作ってください!

データ↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1165.lzh

実行結果↓(予想)
Name,Address
Junichi,Tsukuba
Akinori,Hitachi
320デフォルトの名無しさん:2005/11/28(月) 19:12:46
>>319
中身も見ずに書く。
つ[DBI + DBD::CSV]
321デフォルトの名無しさん:2005/11/28(月) 19:34:22
htmlページでラジオ形式のインプットタイプを作り、
100問の5択形式にします。
そして、「国語」、「数学」、「英語」、「理科」、「歴史」という
5分野にそれら100問の回答の点数の結果を反映させたいのですが、
回答は1つの分野にのみ加点されるのではなく、例えば1問目が

「万有引力を発見したのはニュートンである」という質問だったとき

5択のうち1番目を選んだら「理科」の変数にも3点加点され、なお、
「歴史」の変数にも2点加点されるという形にしたいと思っています。

この場合、1科目の変数のみに影響するのではなく2科目以上になるので、
各質問ごとに設けた配列の点数をそのまま、「理科」だけに加点するということは
できなさそうです。



それぞれ1問目の input name を "Q001"
2問目は input name を "Q002"とし、3問目以降も同じような方法で
100問目まで指定していきます。

そして、各問題、 「はい」、「はいに近い」、「どっちでもない」、
「いいえに近い」、「いいえ」という5択にして、
input value を「はい」から、"1","2","3","4","5"としていきます。


なにかいい構成が分かるかたいらっしゃいましたら、サブルーチン教えてください。
322デフォルトの名無しさん:2005/11/28(月) 19:53:27
俺はこういうのはJavaScriptでやっちゃってる。
323デフォルトの名無しさん:2005/11/28(月) 20:32:27
>>322
sendmailもいれてるからPERLでやってるんだけど、どうだろー
324デフォルトの名無しさん:2005/11/28(月) 20:34:03
もしくは、計算部分だけJAVAで組んでその結果の変数値(スコア)のみを
CGIに渡すことって可能?
325デフォルトの名無しさん:2005/11/28(月) 21:23:59
$table[1] = { # Q001
  Q => {
    label => "万有引力を発見したのはニュートンである",
    option => [split(" ","はい はいに近い どっちでもない いいえに近い いいえ")]
  },
  A => [
    { rika => 3, rekisi => 2 }, #選択肢1
  ]
};

構成ってこういうこと?
俺もこれをそのままJSONにして、採点までJavaScriptでやった方がいいと思う
326デフォルトの名無しさん:2005/11/29(火) 01:16:34
答えてくれて、ありがとう。
演算部分はjavascriptで組んで、
出てきた結果の値(各分野の点数や文字列など)を
PERLで組んだCGIにデータを受け渡すことって
可能なのかなー?
327デフォルトの名無しさん:2005/11/29(火) 01:34:11
>>326
フォーム内のフィールドにセットしてsubmitするとか、
クエリ文字列を生成しページ移動(Location.href)とか、
今流行のXMLHttpRequestとか色々あるんじゃないかな
328デフォルトの名無しさん:2005/11/29(火) 09:24:09
>>327
最初の1ページ目でjavascriptで演算した値を2ページ目のcgiにサブミットして
表示させるってことは可能?

普通、cgiにサブミットするときってフォーム入力で、入力したもの(変数として)がそのまま
cgiのほうに渡されるでしょ?これを1ページ目でjavascriptで計算して、その結果の値を
そのままcgiに渡すって方法どうすればいいかな?

いいサンプルページやサンプルソースあったら教えてください。

もしかしたら、フォーム入力の「生年月日入力」の部分でこういうふうにjavascriptを組み込んで
昭和→西暦変換とかした値をcgiに渡してたりするようなページもあるような気もします
329デフォルトの名無しさん:2005/11/29(火) 09:47:48
http://proxy.f2.ymdb.yahoofs.jp/users/13a494ce/bc/sample.html?bcDAlAEB6aOdocif

このような形で問100まであって、問100までの分の値と名前やメアドの値を
formmail.cgiというものに渡すというかんじです。CGI側で質問100個の分の
演算をするのか、もしくは、アップーロードした、この1ページ目でjavascriptを使って
演算し、結果のみの値をcgiに渡して、それらを出力するのがいいのか迷っています。

また、記述の方法などのアドバイスもいただければ幸いです。
330329:2005/11/29(火) 10:15:36
何度もすみません。
やはり、javascriptは使わずcgi側で100問の結果判定を演算するサブルーチンを
作りたいのですが、どういう標記にすればいいでしょうか?>>321にも書きましたが

それぞれ1問目の input name を "Q001"
2問目は input name を "Q002"とし、3問目以降も同じような方法で
100問目まで指定していきます。

そして、各問題、 「はい」、「はいに近い」、「どっちでもない」、
「いいえに近い」、「いいえ」という5択にして、
input value を「はい」から、"1","2","3","4","5"としていきます。

というかんじです。>>322さん、ありがとうございました。
もっと分かりやすい構文を教えていただけないでしょうか?

今考えているのは1ページ目でフォーム入力(ラジオ選択から得た情報)をcgiに
submitした後、getformして入力された値を読み込み

#質問結果判定
sub hantei {

1問目(1ページ目のQ001)「万有引力を発見したのはニュートンである 」に対し、
5択「はい(VALUE=1)」、「はいに近い(2)」、「どっちでもない(3)」、「いいえに近い(4)」、「いいえ(5)」のうち

・「はい」を選ぶと理科に3点加算(rika +=3)、歴史にも2点加算(rekishi +=2)とし、
・「はいに近い」を選択したなら(rika +=2)、(rekishi +=1)
・「どっちでもない」を選択したなら(rika +=1)、(rekishi +=0)
・「いいえに近い」を選択したなら(rika +=0)、(rekishi +=0)
・「いいえ」を選択したなら(rika +=0)、(rekishi +=0)

次の質問(Q002)で同じような形でQ100まで演算していきます
331デフォルトの名無しさん:2005/11/29(火) 11:16:32
どうでもいいけど、毎問メールアドレスを入力させられんの?
332デフォルトの名無しさん:2005/11/29(火) 11:37:19
設問ごとの得点表を

%SCORE_TABLE = (
Q001 => { 1 => { rika => 2, rekishi => 2 },
2 => { rika => 2, rekishi => 1 },
....
},
....
}

という形で用意する。

cgi入力のうち、QNNNに対応する値を%input = (Q001 => 2, Q002 => 1 ,... )
という形のハッシュにまとめる。

あとは

while (my($q, $a) = each %input) {
while (my($k, $s) = each %{$SCORE_TABLE{$q}->{$a}}) {
$score{$k} += $s;
}
}

とまわせば%scoreにそれっぽい結果が得られるだろう。
333329:2005/11/29(火) 11:38:26
>>331
ううん、メアドを登録しなかったらしなかったで得点表示のみのページのみ
出力されて、メアド登録したら、直接SENDMAILで詳細結果が
メールで届くようにするよ。
334329:2005/11/29(火) 13:08:49
>>332
非常にありがたいんですが、原始的な組み方で

if ($moji{Q001} == 1) {
$rika += 2;
$rekishi += 1;}
elsif ($moji{Q001} == 2) {
$rika += 0;
$rekishi += 0;}
elsif ($moji{Q001} == 3) {
$rika += 0;
$rekishi += 0;}
elsif ($moji{Q001} == 4) {
$rika += 0;
$rekishi += 0;}
elsif ($moji{Q001} == 5) {
$rika += 0;
$rekishi += 0;}
335329つづき↑:2005/11/29(火) 13:09:10
にして、最終的にその結果から

if ($rika == 1) {$rikaTEXT = 'rika1点かな';}
elsif ($rika == 2) {$rikaTEXT = 'rika2点かな';}
elsif ($rika == 3) {$rikaTEXT = 'rika3点かな';}
elsif ($rika == 4) {$rikaTEXT = 'rika4点かな';}
else {$rikaTEXT = 'rika不明かな';}

if ($rekishi == 1) {$rekishiTEXT = 'rekishi1点かな';}
elsif ($rekishi == 2) {$rekishiTEXT = 'rekishi2点かな';}
elsif ($rekishi == 3) {$rekishiTEXT = 'rekishi3点かな';}
elsif ($rekishi == 4) {$rekishiTEXT = 'rekishi4点かな';}
else {$rekishiTEXT = 'rekishi不明かな';}

そしてこのスコアから判断されたメッセージをHTML出力するとき

$rikaTEXT<BR>
$rekishiTEXT<BR>


でいいのかな?このままの構成を残して訂正しなきゃならない部分を教えてください。
これで実行してもrikaのスコアしか表示されなくて、rekishiのスコアは表示されません(T_T)
336デフォルトの名無しさん:2005/11/29(火) 19:04:01
鬱陶しいなあ。
まったく理解できないのに偉そうなことばかり。
もうどこかに委託しろよ。
337デフォルトの名無しさん:2005/11/29(火) 20:50:31
>>336
まあまあ、あまり怒りなさんな。
オレはこの調子で100問分書いたスクリプトというものをぜひ拝見したい。

>>335
最後の部分をこんな風に書いたんじゃないの?
---------------------------------
print "$rikaTEXT<BR>
$rekishiTEXT<BR> ";
---------------------------------
それなら、こうするとうまくいくよ。
print "$rikaTEXT<BR>\n$rekishiTEXT<BR> ";

あと、スクリプト完成したらぜひ公開きぼ〜ん。
338デフォルトの名無しさん:2005/11/29(火) 23:18:59
>>337
ありがとう。見せたいとこだけど、
ごめんよー
339デフォルトの名無しさん:2005/11/29(火) 23:57:56
>>338
そうか。Perlスクリプトを公開すれば解答も公開すること
になるから仕方ないかもしれんな。しかし、大体の想像はつく。
>>334 に書いてあるものを100問分作って、
>>335 に書いてあるものを0〜200の範囲で作るんだね。
拝見できないのは残念だが、まあ、がんばってタイプしてくれ。
340デフォルトの名無しさん:2005/11/30(水) 00:31:36
>>339
本当にありがとう。いい人いるんだね。ありがとう。
点数配分を配列ではなく、原始的な構造でチマチマ入力してやっていきます。
3000行以上のCGIになります(笑)
341デフォルトの名無しさん:2005/11/30(水) 07:26:07
微笑ましいですね^^
342デフォルトの名無しさん:2005/11/30(水) 11:25:43
^^;
343デフォルトの名無しさん:2005/11/30(水) 19:04:43

性別

回答者合計者○($SEXSUM)名中

男○($SEXMALE)名
女○($SEXFEMALE)名




というのをHTMLで出力したいんだけど、ディレクトリに SEX.txtというのを置いて
そのtxtファイルの中に「 0,0 」
というふうに男女の初期値の人数をいれておいて。

毎回フォームから'GENDER'の値が0(男性).もしくは1(女性)で送ってきた時のみ。
SEX.txtを読み込んで、1足して表示→そして読み込んだSEX.txtの人数の一人プラスという
ようなPERLスクリプト分かる人いますか?
344デフォルトの名無しさん:2005/11/30(水) 19:11:07
345デフォルトの名無しさん:2005/12/01(木) 13:49:45
西暦の "2005"という部分だけ、取得したいんだけど

$TIME= (ここはどうすればいいですか?)
346デフォルトの名無しさん:2005/12/01(木) 13:56:41
>>345
この辺読んで基礎からじっくり勉強したらいいんじゃない?
http://pc8.2ch.net/test/read.cgi/tech/1131286411/2
http://www.hyuki.com/writing/techask.html
347デフォルトの名無しさん:2005/12/01(木) 14:02:29
my($sec, $min, $hour, $day, $mon, $TIME, $wday) = localtime(time);

# 取得した値を調整(リファレンス参照)
$TIME+= 1900;
348デフォルトの名無しさん:2005/12/01(木) 14:03:51
>>347
とんくす
349デフォルトの名無しさん:2005/12/01(木) 14:27:50
$TIME=`perl -MPOSIX=strftime -le 'print strftime("%Y", localtime())'`
350デフォルトの名無しさん:2005/12/01(木) 14:29:20
>>347
長い

$TIME = 1900 + (localtime(time()))[5];
351デフォルトの名無しさん:2005/12/01(木) 16:01:06
>>350
長いというならlocaltimeの引数のtime()も省略可能だよ。
352デフォルトの名無しさん:2005/12/01(木) 16:11:56
>>351
ナイスつっこみ!
お前みたいなのを待っていた
353350:2005/12/01(木) 16:15:15
知ってるよ
どんなunixtimeを渡すのか分からんから一例を書いたまでだ
354デフォルトの名無しさん:2005/12/01(木) 16:42:12
そういうのを負け惜しみって言うんだぜ
355デフォルトの名無しさん:2005/12/01(木) 17:56:57
>>345
$TIME = 1900 + (localtime)[5];
356デフォルトの名無しさん:2005/12/01(木) 18:00:06
個人的には strftime の方が好みだな。
357デフォルトの名無しさん:2005/12/01(木) 18:04:14
358350:2005/12/01(木) 18:08:14
なんで煽られてるのかが分からんのだが・・中学生か?
359デフォルトの名無しさん:2005/12/01(木) 18:24:26
360デフォルトの名無しさん:2005/12/01(木) 18:28:38
>>358
変な奴はほっとけ
361デフォルトの名無しさん:2005/12/01(木) 18:38:49
VIPが出来てから馬鹿が流入してきた
362デフォルトの名無しさん:2005/12/03(土) 23:36:45
馬鹿というかガキなんだよな。煽り方も知らないような。
363デフォルトの名無しさん:2005/12/06(火) 21:25:33
ネットショップで○○時から○台限定で販売、とかいうのを買おうとすると
真っ先にスクリプターに買い占められちゃうんだけど
そういうのに対抗できる自動購入スクリプトってPerlで組めませんか?
364デフォルトの名無しさん:2005/12/06(火) 23:39:56
組めたとしてもここで公開されれば対策される。
対策されなくても公開されている以上大勢が使う。
意味がない。
365デフォルトの名無しさん:2005/12/07(水) 00:01:35
>>363
組めます
366デフォルトの名無しさん:2005/12/07(水) 04:17:29
。゚(゚∩д∩゚)゚。
確かに仰るとおりですね・・・
367デフォルトの名無しさん:2005/12/07(水) 08:47:31
楽天のなら作った事ある
368デフォルトの名無しさん:2005/12/07(水) 09:24:49
ビックカメラのは組めませんか?
369デフォルトの名無しさん:2005/12/07(水) 09:30:28
楽天のは空売りですよ
370367:2005/12/07(水) 09:41:05
いや、俺は楽天で1円で1GBのmp3プレーヤゲットしたんだがw

サンプルページはないのか
ビックカメラの
仕様が分からんとどうにもならんだろ
371デフォルトの名無しさん:2005/12/07(水) 10:57:09
ビックカメラの場合
こういう場合のと
http://www.biccamera.com/bicbic/jsp/w/catalog/detail.jsp?PRODUCT_ID=0010097057
こういう場合のがあるんだけどなんか違うの?
http://www.biccamera.com/bicbic/app/w?ActionType=bw011100_01&PRODUCT_ID=0010007029
372デフォルトの名無しさん:2005/12/10(土) 15:47:01
age保守
373PAJA:2005/12/10(土) 16:52:51
はじめまして、PAJA といいます。
# Vine Linux 3.1 の Perl v5.8.2 です。

./trial.pl の中で、

`vi ./hoge.txt`

と記述したところ、下記のようなメッセージがでてしまいました。

" Vim: 警告: 端末への出力ではありません"

やりたいことは、./trial.pl を実行すると "./hoge.txt を vi で開く"
ようにすることです。

どうすれば、できるようになるでしょうか。

よろしく、お願いします。
374デフォルトの名無しさん:2005/12/10(土) 17:23:42
system "vi hoge.txt";
375PAJA:2005/12/10(土) 19:41:10

>> 374

ちゃんと開くことが出来るようになりました。
ありがとうございました。
376デフォルトの名無しさん:2005/12/11(日) 05:44:49
>>373
実行したものからの出力を受け取らないならバッククォートは使わない

と覚えておくといいよ。
377デフォルトの名無しさん:2005/12/14(水) 15:28:53
すいません。教えてください。
$_ = "AI今日U<KAKIKU>SASISU明日<TATI*TU>NANI";
であるとき

$s1が"AI今日U<KAKIKU>SASISU%sNANI"、
$s2が"明日"、
$s3が"明日TU"、
$s4が"TATITU"
となるようにするプログラムを教えてください。
どうかよろしくお願いします。
378デフォルトの名無しさん:2005/12/14(水) 15:53:09
>>377
$s1 = "AI今日U<KAKIKU>SASISU%sNANI";
$s2 = "明日";
$s3 = "明日TU";
$s4 = "TATITU";

それだけしか条件がないとこれでもいいわけだが(笑)

どういう規則でそうなるのか例だけじゃわかんね。

379377:2005/12/14(水) 16:18:46
>378
すいません。 $_ = "AI今日U<KAKIKU>SASISU明日<TATI*TU>NANI";が条件です。
自分では以下のようにしてやってみていたのですが、うまくいきません。
@list = split (/,/, $_);

if ($list[2] =~ /<[A-Z]+\*[A-Z]+>/) {
($s1 = $list[2]) =~ s/[^A-Z][^<]*<[A-Z]+\*[A-Z]+>/%s/g;

@s2 = $list[2] =~ /([^A-Z][^<]*)<[A-Z]+\*[A-Z]+>/o;
$s2 = $s2[0].$s2[1];

@s3 = $list[2] =~ /([^A-Z][^<]*)<[A-Z]+\*([A-Z]+)>/o;
$s3 = $s2[0].$s2[1];

@s3 = $list[2] =~ /<([A-Z]+)\*{1}([A-Z]+)>/g;
$s3 = $s3[0].$s3[1];
}
380デフォルトの名無しさん:2005/12/14(水) 16:30:10
だめだ。問題を説明する能力のない人らしいので
エスパーさん出番です。
381ヽ(´ー`)ノ ◆.ogCuANUcE :2005/12/14(水) 16:48:42
こうかな。

$_ = "AI今日U<KAKIKU>SASISU明日<TATI*TU>NANI";

(my $s1 = $_) =~ s/([^A-Z<]+)<([A-Z]+)\*([A-Z>]+)>/\%s/;
my $s2 = $1;
my $s3 = $1 . $3;
my $s4 = $2 . $3;

use Data::Dumper;
print Data::Dumper->Dump([$s1, $s2, $s3, $s4], [map { 's'.$_ } (1 .. 4)]);

>>377
誰にでも理解できるように仕様を説明するように。
具体的に言うと、小学生にも分かるように。
382377:2005/12/14(水) 17:07:42
というか、解決?かどうかまだ不明ですが一応出来ました。
379は貼り間違いました。↓は解決?したものです。
$_ = "AI今日U<KAKIKU>SASISU明日<TATI*TU>NANI";
($s1 = $_) =~ s/[^A-Z][^w]{1,3}<[A-Z]+\*[A-Z]+>/%s/g;
print "$s1\n";

@s2 = $_ =~ /([^A-Z][^w]{1,3})<[A-Z]+\*{1}[A-Z]+>/o;
print "@s2\n";

@s3 = $_ =~ /([^A-Z][^w]{1,3})<[A-Z]+\*{1}([A-Z]+)>/o;
print "@s3\n";

@s4 = $_ =~ /<([A-Z]+)\*{1}([A-Z]+)>/g;
print "@s4\n";
これで一応目的の動作をするのですが、
2行目が特によくわかりません。
[^A-Z][^w]{1,3}は何でしょうか?
[^w]って何?ワード文字?ワード文字は\wですよね?
[^w]を普通に読むとwという文字以外すべてだと思うのですが。
383377:2005/12/14(水) 17:14:38
>381
わかりにくくてすいません。
目的は文字列中の<*を含む英大文字>の部分とその直前の漢字の展開です。
384デフォルトの名無しさん:2005/12/23(金) 19:01:41
メートル単位の長さを与えて、それをヤードに変換して表示するプログラムを教えてください。

1メートルは1.1ヤードとしてください。
385デフォルトの名無しさん:2005/12/23(金) 19:03:08
インボカントって何か教えてください
386384:2005/12/23(金) 19:11:02
追記します。

メートル単位の長さをヤードに変換したり、ヤード単位の長さをメートルに変換するプログラムを教えてください。

>>384でかいたような一方通行のプログラムでしたら分かります。
上のような場合、どうやって分岐(?)させればよいのでしょうか?
387384:2005/12/23(金) 19:17:39
>>384について考えたプログラムを載せておきます。
どなたか、>>386のように改変してください。。。

use strict;
my ($meter, $yard);
print "長さをメートルで入力してください";
$meter = <STDIN>;
chomp ($meter);
$yard = $meter * 1.1;
print "$meterメートルは$yardです。\n";
388デフォルトの名無しさん:2005/12/23(金) 20:02:18
>>387
入力値がメートルとした場合のヤードの値
入力値がヤードとした場合のメートルの値
を計算して結果を2行書けばいいんじゃね?
389デフォルトの名無しさん:2005/12/23(金) 22:21:41
>>388
なるほど。
入力時の数字が、10だったら

10メートルは***ヤードです。
10ヤードは***メートルです。

とすれば良いのですね。
逆転の発想ですね!ありがとうございます。
390デフォルトの名無しさん:2005/12/24(土) 00:19:30
それなんて宿題
391デフォルトの名無しさん:2005/12/24(土) 17:51:13
age
宿題でもどーんとこいや
392デフォルトの名無しさん:2005/12/25(日) 18:26:07
perl -MO=Xref,-r hoge.pl の結果から以下のような結果を整形してみたいです。出してください。
■結果
hoge.pl 250<0>main()
hoge.pl 160├<1>get_home_directory()
hoge.pl 135│└<2>usage()
hoge.pl 190├<1>read_configration()
hoge.pl 220│└<2>get_string()
       <<略>>
393ヽ(´ー`)ノ ◆.ogCuANUcE :2005/12/25(日) 19:31:09
>>392
-r 付けなきゃそれっぽくならんかね。
394デフォルトの名無しさん:2005/12/26(月) 00:01:42
あれだと、エディタのタグジャンプ使えないし、みづらいので。
cの関数コールグラフ書くフリーウェアのfunctreeみたいな使い勝手
のものが欲しいです。
395デフォルトの名無しさん:2005/12/26(月) 11:49:52
>>386
引数で数値の後に m が付いていたらメートル、yが付いていたら
ヤード、ということにするならこんな感じか。

#!/usr/bin/perl -w
use strict;
for(@ARGV) {
if(/^(\d+(\.\d+)?)(m|y)$/) {
if ($3 eq 'm') {
print "$1 メートル = " . ($1 * 1.1) . " ヤード\n";
} else {
print "$1 ヤード = " . ($1 / 1.1) . " メートル\n";
}
} else {
print STDERR "$_: 解釈できません。\n";
}
}
396デフォルトの名無しさん:2006/01/13(金) 16:15:09
1
INDATEというファイルの中身を読み込んで処理するものであること。(INDATEも提出すること)
2
少なくとも一個のif文をつかっている。

3
for.while.foreachなどの繰り返しを少なくとも一個は使っている。
4
少なくとも一個の配列を使っている。
5
少なくとも一個の引数を使っている。
6
以下の様に実行することでOUTDATEに結果が出力される。
%KADAI3<INDATE>OUTDATE
注:3は引数である。

という課題です。頼みます。
397デフォルトの名無しさん:2006/01/13(金) 16:17:49
>>396
教科書に答えが。
398デフォルトの名無しさん:2006/01/13(金) 16:18:35
>>397
う・・・
399デフォルトの名無しさん:2006/01/13(金) 16:40:59
なんだその意味不明な課題
俺が馬鹿なだけかもしれんが、何をしたいのか訳わからん
400デフォルトの名無しさん:2006/01/13(金) 16:44:17
>>399
1〜6を満たす自由な機能のプログラムを作るって課題なんですが…
401デフォルトの名無しさん:2006/01/13(金) 16:47:08
ああそういう意味か
%KADAI3<INDATE>OUTDATE
まだこれの意味が分からんが
402デフォルトの名無しさん:2006/01/13(金) 16:56:45
>>401
Terminalで入力したらってことだからあまり関係ないです。ごめんなさい。
403デフォルトの名無しさん:2006/01/13(金) 17:28:01
それDATEじゃなくてDATAだろ
404デフォルトの名無しさん:2006/01/13(金) 17:37:44
>>403
そうです。ほんとごめんなさい。
405デフォルトの名無しさん:2006/01/13(金) 21:34:26
結局>>397でFAだな
406デフォルトの名無しさん:2006/01/14(土) 07:43:38
そんなぁ・・・
407デフォルトの名無しさん:2006/01/14(土) 09:42:00
#!/usr/bin/perl
use LWP::Simple;
$url = 'http://girls.twistys.net/preview/';
for ($i=1; $i<=500; $i++) {
$num = sprintf("%03d", $i);
$_ = get($url.$num."/");
s/\w*\d{1,2}\.jpg/push @jpgs, $&/eg;
foreach $jpg (@jpgs) {
getstore($url.$num."/".$jpg, $num.$jpg);
}
}
408デフォルトの名無しさん:2006/01/16(月) 08:50:23
仲間分けについてのプログラムについて教えてください
1番と3番
1番と5番
1番と7番
2番と6番
2番と8番
3番と5番
3番と11番
が仲間です
配列には上から
1\t3
1\t5 ……のように入っています

この時1,3,5,7,11 と 2,6,8 のように仲間に分けるプログラムを作ってください
409ゆみ:2006/01/16(月) 11:24:17
Perl初心者です。教えてください。

日付,メールアドレス
日付,メールアドレス
日付,メールアドレス



と数万行も続くデータから、重複メールアドレスが存在したときは
その行を取り除くということは出来るのでしょうか。
困っています(;;)教えてください。


410デフォルトの名無しさん:2006/01/16(月) 11:39:46
できるよ
411ゆみ:2006/01/16(月) 11:44:33
どうやればいいのでしょうか?
是非教えてください。。。
412デフォルトの名無しさん:2006/01/16(月) 11:44:49
>>409
perl -ne "/,(.+)/ && !$dup{$1}++ && print" in.csv > out.csv
413ゆみ:2006/01/16(月) 11:51:59
>>412

ありがとうございます(*^^*)
これはコマンドプロンプト(PC)上で行う処理方法でしょうか?
サーバー上のCGIファイルの中で処理する場合の書き方はありますか?

またin.csvというのが元のデータファイルで、out.csvというのが
出力された新しいファイルですよね?
414ゆみ:2006/01/16(月) 12:02:04
perl -ne "/,(.+)/ && !$dup{$1}++ && print" in.csv > out.csv

これも試してみましたがうまくいきません。
1万行以上あるのに新しく作られたファイルは60行足らず。

もしかすると私の説明不足なのかもしれません。
重複したメールアドレスの存在しない日付,メールアドレス
のリストを作りたいのですが。。。

意味わかりますでしょうか(**)ごめんなさい。。。
415デフォルトの名無しさん:2006/01/16(月) 13:54:12
>414
m月d日に誰からメールが来てるかのリストを作るのか?

だったらDBに読み込んでクエリ書いた方が手っ取り早いと思われ。
SELECT dateval, addr FROM infile GROUP BY dateval, addr;
416デフォルトの名無しさん:2006/01/16(月) 15:43:02
>>414
てことはまず日で分けて、その中に同じアドレスがあっても1つで出すということだな。
じゃあこれを参考に作れ。

my %data;

while (<>) {
 chomp;
 if (/^([^,]+),(.+)$/) {
  $data{$1}{$2} = 1;
 }
}

for my $day (sort keys %data) {
 for my $addr (sort keys %{$data{$day}}) {
  print "$day,$addr\n";
 }
}
417デフォルトの名無しさん:2006/01/16(月) 15:45:47
>>408
何がどう仲間なのか全然分からん。
もっと詳しく説明するように。
418デフォルトの名無しさん:2006/01/16(月) 19:15:13
>>408
こんなのか?データは標準入力から。

my @ary=();
my @index=();
sub pushme($$)
{
my ($ary,$val)=@_;
my $i;
for($i=$val;!UNIVERSAL::isa($ary->[$i],'ARRAY');$i=$ary->[$i]){}
push(@{$ary->[$i]},$val);
}
while($_=<STDIN>){
/^(\d+)\t(\d+)$/;
if(defined($ary[$1])){
$ary[$2]=$1;
pushme(\@ary,$2);
}elsif(defined($ary[$2])){
$ary[$1]=$2;
pushme(\@ary,$1);
}else{
my @newary=($1,$2);
$ary[$1]=\@newary;
$ary[$2]=$1;
}
foreach(@ary){
if(ref($_) && ref($_) eq 'ARRAY'){
print join(",",@$_)."\n";
}
}
419418:2006/01/16(月) 19:18:56
本当は sub pushme に \@ary 渡すのは蛇足。
渡さなくともここでは @ary は有効なスコープ。
420デフォルトの名無しさん:2006/01/16(月) 20:08:55
>>408
@list = ( "1\t3", "1\t5", "1\t7", "2\t6", "2\t8", "3\t5", "3\t11" );
$tmpstr .= join ':', map "\t$_", @list;

1 while $tmpstr =~ s/(\t\d+)((?:\t\d+)*):((?:[^:]*:)*)((?:\t\d+)*)\1((?:\t\d+)*)(?::|$)/$1$2$4$5:$3/;
1 while $tmpstr =~ s/(\t\d+)((?:\t\d+)*)\1(?=\t|:)/$1$2/;

@grouping = map [/(\d+)/g], split ':', $tmpstr;
$" = ",";
print "@{$grouping[0]}と@{$grouping[1]}\n";
421408:2006/01/16(月) 21:04:13
配列に@nakamaに上から
$nakama[0]="1\t3";
$nakama[1]="1\t5";
……

という風に入っていて、それぞれ1と3は仲間、1と5は仲間という意味になっています。
1と3が仲間で、3と11が仲間であれば1と11も仲間とします。

これで>>408を 1,3,5,7,11と 2,6,8に分けたいのです。
422デフォルトの名無しさん:2006/01/16(月) 21:06:04
>>420
おお、更新していなくて分かりませんでした。
それでうまく出来ました。ありがとうございます!
423ゆみ:2006/01/16(月) 23:00:24
409です。>>416さん有難う御座います。。。
私はホントに初心者で・・・説明べたで申し訳御座いません。
416さんのは同じ日付内で同じメアドがあった場合、排除するという
内容でしょうか?

たとえば
1月1日,[email protected]
1月1日,[email protected]
1月1日,[email protected]
1月2日,[email protected]
1月2日,[email protected]
1月3日,[email protected]
1月3日,[email protected]
1月4日,[email protected]
とあった場合、

↓↓↓変換後↓↓↓↓

1月3日,[email protected]
1月3日,[email protected]
1月4日,[email protected]

というように同じメアドが重複しないように更に日付は最新(最下段)
の日付を付けてリスト化したいのです。。。
日付は最上段のものでも構いませんが。。。

出来れば。。。できれば。。。データファイルの読み込み部分から
解説して頂けないでしょうか。。。DBではなく、テキストファイルなんです。。。
本当にすみません(><)(;;)


424デフォルトの名無しさん:2006/01/16(月) 23:19:38
ファイル読み込みくらいなら、perl入門のサイトや本で調べられるだろ
425デフォルトの名無しさん:2006/01/16(月) 23:25:50
>>423
初心者初心者連呼するならエクセルのフィルタ使うとかにしたほうがいいんでない?
426ゆみ:2006/01/16(月) 23:33:08
>>424厳しいお言葉・・・有難う御座います。
ではファイルの読み込み部分は結構です。。。
>>425それでは意味がないのです。。。

お願いします!!!(;;)
427デフォルトの名無しさん:2006/01/16(月) 23:39:52
こんな擦れ合ったのか〜

次の答えを教えてください。

以下のタグを結合したい。

(1)<M>hogeM</M><X>hogeX</X> →  <X>hogeMhogeX</X>
(2)<X>hogeX</X><M>hogeM</M> →  <X>hogeXhogeM</X>
(3)<M>hogeM</M><X>hogeX</X><M>hogeM</M>   → <X>hogeMhogeXhogeM</X>
※<M>hogeM</M><X>hogeX</X><M>hogeM</M><X>hogeX</X> は結合しない。

<例>
※以下は一行で、\ は連結の意味です。

......hoge.......<M>hogeM</M><X>hogeX</X>.....\
........hoge......<X>hogeX</X><M>hogeM</M>.....\
.....hoge.........<M>hogeM</M><X>hogeX</X><M>hogeM</M>...\
.........<X>hogeX</X>................<M>hogeM</M>..\
..<M>hogeM</M><X>hogeX</X><M>hogeM</M><X>hogeM</X>

......hoge.......<X>hogeMhogeX</X>.......\
......hoge......<X>hogeXhogeM</X>..........hoge....\
.....<X>hogeMhogeXhogeM</X>............<X>hogeX</X>...\
.............<M>hogeM</M>...\
.<M>hogeM</M><X>hogeX</X><M>hogeM</M><X>hogeM</X>

正規表現でも、何でもOKなのでお願いします。
428デフォルトの名無しさん:2006/01/16(月) 23:52:53
難しかったかな?
429デフォルトの名無しさん:2006/01/17(火) 00:12:25
>>427
ヒント: 解く奴も人間
430デフォルトの名無しさん:2006/01/17(火) 00:36:53
>>427
無理
431デフォルトの名無しさん:2006/01/17(火) 01:53:26
>>426
意味がないってどういうこと?
csvをエクセルに読み込んで重複を消すだけじゃないの?
知識らしい知識もいらんし煽りじゃなくあなたのような人向けだと思うが。
432デフォルトの名無しさん:2006/01/17(火) 01:59:03
>>413でCGIで動かしたいってあるよ
433デフォルトの名無しさん:2006/01/17(火) 02:50:39
>>423

while (<$fh>) {
chomp;
my($date, $mail) = split /,/;
$mails{$mail} = $date;
}

後は自分で何とかしろ。
434ゆみ:2006/01/17(火) 10:20:52
>>433さん 素敵です!
あまりハッシュって使ったこと無かったので・・・
出来ました!!!有難う御座います!!!
435デフォルトの名無しさん:2006/01/25(水) 21:48:54
<2></2>を削除する正規表現教えて
(例)
.....<1>.....<2>....</2>....<1>.....
   ↓
.....<1>.............<1>.....
436デフォルトの名無しさん:2006/01/25(水) 21:50:42
s/.....<1>.....<2>....</2>....<1>...../.....<1>.............<1>...../g
437デフォルトの名無しさん:2006/01/25(水) 21:51:45
>>435だけど
間違えた。

<2></2>を削除する正規表現教えて
(例)
.....<1>.....<2>....</2>....</1>.....
   ↓
.....<1>.............</1>.....
438デフォルトの名無しさん:2006/01/25(水) 23:08:10
正規表現の基礎の基礎じゃないか
439マル:2006/01/26(木) 01:37:34
掲示板スクリプトで、名前が「あ」か「い」か「う」の人以外は書き込みできない、
という風にする場合

if ($name !/あいう/) { &error("名前が間違っています",'NOLOCK'); }

ではないですよね。
「あ」か「い」か「う」というのはどう書けばいいでしょうか。
440& ◆p8OCeNXbYU :2006/01/26(木) 01:43:21
すみません。実際には「あ」か「い」か「う」ではなく、
「一」か「二」か「三」か・・・「三十五」か「三十六」という風になります。
一〜三十六までの漢数字を入れなければ投稿できない、という風にしたいのです。

自動で貼られてしまう広告よけのためなのですが、
何卒よろしくお願い致します。
441マル:2006/01/26(木) 01:50:09
440=439です。
442& ◆p8OCeNXbYU :2006/01/26(木) 02:34:09
すみません。できました。
|で区切ればorの意味になるようでした。

if ($name !~/一|二|三/) { &error("名前が間違っています",'NOLOCK'); }

というような感じで動きました。失礼しました。
443デフォルトの名無しさん:2006/01/26(木) 03:41:24
これも正規表現の基礎の基礎の基礎だよな・・
マジで・・
444デフォルトの名無しさん:2006/01/26(木) 10:33:45
<2>.*?</2>
445デフォルトの名無しさん:2006/01/26(木) 12:21:36
>>444
><2>.*?</2>
".*?"という文字列はGoogleで検索できないため、申し訳ありませんが、
意味を教えていただけますでしょうか?

.*は文字の0個以上(.+は1個以上)にマッチだと思いますが、これに?が付いた
.*?がいまいち、よく分かりません。
446デフォルトの名無しさん:2006/01/26(木) 12:50:59
447デフォルトの名無しさん:2006/01/27(金) 11:51:12
>>442
use encoding でエンコード指定しておいて
$name !~ /[あいう]/ で判定する方がいいと思う。

448デフォルトの名無しさん:2006/01/27(金) 11:54:17
>>445
最小マッチ

デフォルトは最大でマッチする。
たとえば 'abcabcabcabc' という文字列に対して /a.*a/ は 'abcabcabca'
の部分がマッチするが /a.*?a/ だと 'abca' がマッチする。
449sage:2006/01/27(金) 17:48:26
>>448, 446
ありがとうございます。

>最小マッチ
Perl歴17年ですが、この正規表現は見落としていました。
わざわざ、(1)のような書き方をしてきましたが、
(1) <2>[^<]*</2>
(2)の方が読みやすいですね? 
(2) <2>.*?</2>
勉強になりました。
450デフォルトの名無しさん:2006/01/27(金) 17:53:34
はぁ、どうして下らない嘘をつくかな
451デフォルトの名無しさん:2006/01/27(金) 17:54:23
>>449
詳説 正規表現 第2版まじおすすめ
452デフォルトの名無しさん:2006/01/27(金) 19:28:06
Perl 歴 17 年で正規表現もまともに使えないなんて、そんなの「歴」のうちに入らんよ。
453449:2006/01/27(金) 21:55:45
>>452
>Perl 歴 17 年で正規表現もまともに使えない
正規表現の基本が分かっていなかったので、人にPerlを教える
のは無理でしょうが、研究機関の仕事を主にPerlでこなして
きたことは嘘ではありません。どんな書き方でも、限られた
時間内にバグがないスクリプトが書ければ、仕事がこなせま
す。

perlの良いところは、Larry Wallが言うように、>> 449 の
(1)でも(2)でも、様々な方法で目的が達成できる点です。
454デフォルトの名無しさん:2006/01/27(金) 22:01:37
なんつーか・・
一生VB・HSPやってるようなモンだな
進歩がなけりゃただの・・
455デフォルトの名無しさん:2006/01/27(金) 22:12:42
449 の2しか知らん
456デフォルトの名無しさん:2006/01/27(金) 23:32:19
>>453
こなせてないじゃん。
>>435 程度のことも人に聞かないと出来ないんだろ?
457デフォルトの名無しさん:2006/01/28(土) 14:14:55
Perl って1987年12月生まれなんだな。18年前か
http://history.perl.org/PerlTimeline.html

まあ17年前からPerl(というかUNIX)やってて正規表現知らないなんて
ありえない
458デフォルトの名無しさん:2006/01/28(土) 15:43:49
「Perlプログラマのレベル10」
ttp://d.hatena.ne.jp/naoya/20050809/
のレベル5に
> 多くの人たちがこのレベルを超えないのは、たとえ非効率であっても、
> 再利用可能なコンポーネントの作成を除けば、ほどんど何でもできるからである。
とあるように、必要性を感じられなければそれ以上のものはなかなか知ることが出来ないんだろうね…人間ってのは。
この機会にPerl5の奥深さを学んでみたらどうだ?その霧の先には素晴らしい世界が広がっているぞ
459デフォルトの名無しさん:2006/01/28(土) 17:48:46
>>457
最短マッチが使えるようになったのはPerl5以降だよ。
それ以前に覚えた正規表現をそのまま使い続けていたんだろうね。
460デフォルトの名無しさん:2006/01/28(土) 18:00:14
ああ、最短マッチを知らなかったってことだったのか
斜め読みしてた
461デフォルトの名無しさん:2006/01/30(月) 15:42:23
>>449
くっ。負けた。俺、Perl歴16年。
462デフォルトの名無しさん:2006/01/31(火) 17:18:44
お願いします。

♂チームと♀チームが2つのコートで♂♀別総当り戦をしたく
両コート同時進行として

♂が4チーム・♀が2チームの場合・・・
【Aコート】  【Bコート】
♂1-♂2 ♂3-♂4
♀1-♀2 ♂1-♂3
♂2-♂4 ♀1-♀2

↑の3回戦で総当りになる。

では♂が7チーム・♀が3チームってなったとき
どう組み合わせればよいかみたいなのを計算させたいです。

できれば3連チャンとかで試合することにならないように・・・
463デフォルトの名無しさん:2006/01/31(火) 17:30:13
>>462
♀1-♀2 が2回あるのはただの総当りではないと思われるが
どういう規則なのかね?
464デフォルトの名無しさん:2006/02/01(水) 11:03:17
>>463
スミマセン間違いです・・・。

♂が4チーム・♀が2チームの場合・・・
【Aコート】  【Bコート】
♂1-♂2 ♂3-♂4
♀1-♀2 ♂1-♂3
♂2-♂4   -

465デフォルトの名無しさん:2006/02/05(日) 15:52:03
>>462
こうですか? わかりません。

use strict;
use warnings;
local($a,$b);
my(@t,@p,@f,@ct,$w,$i,$j,$k);
($t[0],$p[0])=('',$f[0]='0');
$t[$_]='♂'.$_,$p[$_]=0,$f[$_]='011111111000',substr($f[$_],$_,1)='0' for (1..8);
$t[$_]='♀'.($_-8),$p[$_]=0,$f[$_]='000000000111',substr($f[$_],$_,1)='0' for (9..11);
@ct=('A:',' B:');
do {
++$_ for (@p);
for (@ct) {
$a=$b=$w=0;
for $k (1..$#p) {
$i=$j=0;
($i,$j) = ($p[$_]>$j && substr($f[$_],$k,1))?($_,$p[$_]):($i,$j) for ($k..$#f);
($a,$b,$w) = ($k,$i,$j<$p[$k] ? $j : $p[$k]) if $p[$k] && $j && ($w<$p[$k] || $w<$j);
}
print $_,$t[$a],'−',$t[$b];
$b=$p[$a]=$p[$b]=substr($f[$a],$b,1)=substr($f[$b],$a,1)=0;
}
print "\n";
$b+=/1/ for (@f);
} while($b);
466デフォルトの名無しさん:2006/02/06(月) 13:29:43
>>462
CPAN には、順列、組み合わせを扱う Algorithm::Permute
というモジュールがある。これが使えるんじゃないの?
(オレは使ったことは無いけど)
467デフォルトの名無しさん:2006/02/08(水) 10:27:13
総当たりの全組合せを求めた後で、それの並べ方を考えればいいのでは
ないだろうか。同じチームがなるべく連続しないようにするなど。
そして最後にコート分けする。
468デフォルトの名無しさん:2006/02/11(土) 11:07:49
直リンクが不可能なアップローダー cgi あったら便利だと思う

直リンクされたことによって消滅するアップローダは多いからな

perl で書かれたものキボン
469デフォルトの名無しさん:2006/02/11(土) 13:48:02
470デフォルトの名無しさん:2006/02/11(土) 13:49:32
>>468
ってかんなもんすでにあんだろが
471デフォルトの名無しさん:2006/02/12(日) 06:11:09
>>470
直リンクを不可能にするような状態のcgiアップローダのスクリプトって配布されてる?
されていないんじゃ?
472デフォルトの名無しさん:2006/02/12(日) 11:00:38
REFERER が期待する値以外だったらリジェクトするだけじゃん
473デフォルトの名無しさん:2006/02/24(金) 06:43:47
474デフォルトの名無しさん:2006/02/24(金) 08:44:13
>>473
ソケットは飛ばない。
perl -MLWP::Simple -e "get q|http://www.example.com/path/to/file.html|"
475デフォルトの名無しさん:2006/02/27(月) 01:08:32
ファイル内の *.gif を *.bmpへ変換するプログラム作ってもらえませんか?
正規表現だったらどうなるでしょうか?
476デフォルトの名無しさん:2006/02/27(月) 01:11:06
拡張子だけ(名前の変更(M))だけ、できればよいので、、、。
変更しなければならないものが100近くあるので^^;助けてください
477デフォルトの名無しさん:2006/02/27(月) 01:21:50
>>475
そんな見当違いな質問をしてると
perlのスクリプトを書いても「どうやって実行するんですか?」
とか聞かれそうだと思われて誰にも相手されないよ
478デフォルトの名無しさん:2006/02/27(月) 01:28:06
>>475
名前の変更(M)とか書いてる所を見るとWindowsだと思うが、
ファイル名をマジで変えるだけなら、DOS窓で

C>CD 変えたいファイルがあるディレクトリ
C>RENAME *.gif *.bmp

でいいんじゃマイカ?

UNIX系なら
% cd 変えたいファイルがあるディレクトリ
% mv *.gif *.bmp

どちらにしろ同じか。

※ データ形式は変わらないから開けなくてもしらん。
479デフォルトの名無しさん:2006/02/27(月) 01:48:34
>>478
> % mv *.gif *.bmp
> % mv *.gif *.bmp
> % mv *.gif *.bmp
> % mv *.gif *.bmp
> % mv *.gif *.bmp
> % mv *.gif *.bmp
480デフォルトの名無しさん:2006/02/27(月) 03:01:53
>>478
それは Windows/DOS じゃないと使えない技だぞ。
481デフォルトの名無しさん:2006/02/27(月) 03:34:00
「名前の変更(M)」って書いてるくらいだから
Windows前提で答えれば良いっしょ
482デフォルトの名無しさん:2006/02/27(月) 11:36:48
>>475はファイル名だけ変えたいんだね。
拡張子がbmpであるgifファイルを作りたいんだね。
いや、きっとそうなんだろうね。質問の内容からして
そうだし、他の人もそう理解しているようだし。
483デフォルトの名無しさん:2006/02/27(月) 12:17:25
perl -pi -e "s/\.gif/\.bmp/g" <ファイル>
484デフォルトの名無しさん:2006/02/27(月) 15:27:57
>>478
有難うございました。WinとLinux(UNIX)では、コマンドが違うからsystem()関数を使っても
同じプログラムとはいかないわけでしたね。
それに、Perlを使わなくてもできるんですね。
Cで書かれたコマンドがすでにあるからこれを使わない手は無いですね。OSにです。


485デフォルトの名無しさん:2006/02/27(月) 15:30:28
今だCでプログラム書いたり、Cで書かれたexeばかり使っているので、手持ちのperlスクリプトを増やしたかった訳でした。。
486デフォルトの名無しさん:2006/02/27(月) 15:31:53
いつもCで事足りてしまうみたいです。。有難うございました。
487デフォルトの名無しさん:2006/02/27(月) 15:34:07
UNIX(Linux)とWindowsのコマンドが違う以上、汎用的なものを作るのってなかなか難しいですね。。。。?
488デフォルトの名無しさん:2006/02/27(月) 15:35:30
本当、Cプログラマで良かったとつくづく思います。。
489デフォルトの名無しさん:2006/02/27(月) 19:52:06
日記はチラシの裏に
490デフォルトの名無しさん:2006/02/28(火) 00:02:26
リアルで会ったら頭蹴り飛ばしてやんのに
491デフォルトの名無しさん:2006/02/28(火) 00:24:24
>>490
乙w死ねw
492デフォルトの名無しさん:2006/02/28(火) 00:26:39
>>490
リアルで会ったら頭蹴り飛ばして殺してやるのにw
493490:2006/02/28(火) 00:32:52

人格異常者だと思われてるから、普段リアルで誰にも相手されないよ〜
494490:2006/02/28(火) 00:37:48
会社訪問した際、面接官に目が包丁のようだよと言われますた。
腹が立ったので、帰る際後ろから面接官の頭蹴り飛ばしてやりました。

電車に乗ると、たくさんのひとの頭を蹴り飛ばさなければならないので
怖くて乗れません。
495490:2006/02/28(火) 00:39:55
別にいつ死んでもいいので、PG組んでます。
496デフォルトの名無しさん:2006/02/28(火) 00:42:55
(;´д`)
497デフォルトの名無しさん:2006/02/28(火) 00:45:32
世の中みんないい人ばかりじゃないしねぇ
498490:2006/02/28(火) 00:46:15
ファイル内って書いてて答えがこれ?
C>RENAME *.gif *.bmp
死ね
499490:2006/02/28(火) 00:53:16
491-495
で、だれ?おまえら
500デフォルトの名無しさん:2006/02/28(火) 00:58:17
おれだよ、おれ
500
501デフォルトの名無しさん:2006/02/28(火) 01:00:00
とりあえずここには
>>478以外、まともな人間はいなさそうだw
502490:2006/02/28(火) 01:01:11
これ書いてる奴が?
% mv *.gif *.bmp
503デフォルトの名無しさん:2006/02/28(火) 01:03:27
>>490
(;´д`) いや 話しかけてこないで。さよなら
504デフォルトの名無しさん:2006/02/28(火) 01:45:20
ローマ字で入力すれば、あらゆるその読みの文字にマッチするスクリプト
gyouで行やら業やらぎょうやらギョウやらgyouやら
505デフォルトの名無しさん:2006/02/28(火) 02:04:59
migemo
506デフォルトの名無しさん:2006/02/28(火) 17:45:14
だってあれ完璧じゃないんだもん
507デフォルトの名無しさん:2006/02/28(火) 18:53:11
>>506
migemo の「辞書」が完璧じゃないんだろ?
「辞書」をしっかり作れ。Perlでmigemoみたいなこと
をやるにせよ、辞書が命だ。
508505:2006/02/28(火) 23:27:34
おまえも>503おまえも>506
死ね
509デフォルトの名無しさん:2006/03/01(水) 17:08:44
>>508
うはwwwカッコヨスwwww
俺にも氏ねって言ってぇぇvvvvvv
510505:2006/03/02(木) 04:09:38
>509
しねしねしねー♪从´∇`从
511デフォルトの名無しさん:2006/03/06(月) 21:20:04
カウンターで
0=あ
1=1

49=を
50=ん
って感じに変換するにはどーすればいいんですか?
512デフォルトの名無しさん:2006/03/06(月) 21:24:12
日本語でおk
513デフォルトの名無しさん:2006/03/06(月) 21:33:41
>>511
my %c = (
 '0' => 'あ',
 '1' => '1',
# 略
 '49' => 'を',
 '50' => 'ん'
);

などと作っておいて $c{$count} のような感じで対応する文字列を求める。
514デフォルトの名無しさん:2006/03/11(土) 00:49:18
>>1
楽天とかで任天堂DSを購入するスクリプト組んでくれよ。人力じゃ無理 買えないw
515デフォルトの名無しさん:2006/03/12(日) 16:39:03
連投スクリプトください
516デフォルトの名無しさん:2006/03/12(日) 16:52:43
#!perl
use LWP::Simple;
while (1) { get 'http://pc8.2ch.net/test/bbs.cgi'; }
517デフォルトの名無しさん:2006/03/12(日) 16:53:39
連投スクリプトください
518デフォルトの名無しさん:2006/03/12(日) 16:54:45
連投規制、バーボンに引っ掛からない2ch投稿スクリプト希望
519デフォルトの名無しさん:2006/03/12(日) 17:18:26
#!perl
use LWP::Simple;
while (1) {
get 'http://pc8.2ch.net/test/bbs.cgi';
sleep 30;
}
520デフォルトの名無しさん:2006/03/12(日) 17:40:11
明らかに悪用する気満々だから嫌。
521デフォルトの名無しさん:2006/03/12(日) 17:47:13
スレを埋めるときに使うんです(><;)
522デフォルトの名無しさん:2006/03/12(日) 18:49:39
スレ埋めは、自分でスクリプトを書ける者にのみ許される神聖なる儀式であルッ!!
523デフォルトの名無しさん:2006/03/12(日) 18:51:08
思いっきり悪用の気配やんか
524デフォルトの名無しさん:2006/03/15(水) 20:52:25
あんま調子にのんなよ
525デフォルトの名無しさん:2006/03/16(木) 23:41:18
テキスト処理でおうかがいします。
半角数字と全角数字が混在したテキストがありまして、
一桁のみの数字は全角、二桁以上の数字は半角に統一したいのです。
中身を見てみると、「33」とか「679」とかになっていて、
どういう入力をしたのか不思議でなりません。
何かよいお知恵はないでしょうか。

Perl 5.8.1、Mac OS XのTerminalで作業をしています。
入力ファイルのエンコードはUTF-16(中国語処理のため)、
use utf8;で処理しています。
526デフォルトの名無しさん:2006/03/16(木) 23:43:46
適当に正規表現で変換してったらいいんじゃないの?

s/1/1/
527デフォルトの名無しさん:2006/03/17(金) 00:20:14
全部半角にしてから全角に直すだな
528525:2006/03/17(金) 23:51:02
>>526
>>527

こんな感じで書いてみました。

while(<>) {
tr/[0-9]/[0-9]/;
s/(¥D)1(¥D)/$11$2/g;
(中略)
s/(\D)9(\D)/$19$2/g;
print;
}

ただ、これだと2回同じ処理をしないといけないですよね。
最初の処理でtr行、次の処理でs行になるんでしょうか。
これを効率よく1回の処理ですませたいのですが、いいやり方をご存知ないですか?
529ヽ(´ー`)ノ ◆.ogCuANUcE :2006/03/18(土) 00:13:06
use utf8;
use Unicode::Normalize;

$str = NFKC($str);
$str =~ s/(?<!\d)(\d)(?!\d)/(my $ret = $1) =~ tr[0-9][0-9]; $ret/ge;

これでどうだろう。
530デフォルトの名無しさん:2006/03/18(土) 17:46:30
>>528
逆。数字をまず全部全角にして、
その後2文字以上連続する全角数字を半角にする。
TextSS のWindowsXP(Professional)64bit化おながいします

もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?

そういや64bitにネイティブ対応している2chブラウザてありましたっけ?



532デフォルトの名無しさん:2006/03/18(土) 21:35:05
テキスト置換で64bitに対応してると
なんかいいことあんの?
533デフォルトの名無しさん:2006/03/18(土) 22:40:20
>>531
マルチ + スレ違い乙
534525:2006/03/18(土) 23:37:27
>530

ご指摘どうもありがとうございます。
他にも処理が山ほどあり、あまり時間がなくてテンパってました。

>529

うまくいきました。どうもありがとうございました。
こういうときに先読み・後読みを使うんですね。
教えていただいたものを流用して、
2桁のみ半角にすることもできました。
535ヽ(´ー`)ノ ◆.ogCuANUcE :2006/03/19(日) 00:33:20
>>529 を書いて気が付いたんだが、Encode::JP::H2Z が変換できるのは
カタカナだけなんだな。

日本語処理で凝ったことしようと思ったら、Jcode なんかねぇ…。
536デフォルトの名無しさん:2006/03/19(日) 03:25:47
>>532
読み込みの段階で64ビットは有利
537デフォルトの名無しさん:2006/03/19(日) 09:25:18
うそつけ
538デフォルトの名無しさん:2006/03/22(水) 21:16:20
>>528
「¥」と来たか。「\」ではないと。
539デフォルトの名無しさん:2006/03/29(水) 06:15:44
すいません、リクです。

数字を有効数字の桁数で丸めるスクリプトを探しています。
例えば、round(数字, 桁数)の形で使うとすると、
round(-12345.067, 4)
round(-12345.067, 7)
round(0.0567, 1)
round(1234567890123456, 4)
は、それぞれ
-12350
-12345.07
0.06
1.235e+015
を返す、というようなものなんですが、どなたかお願いできませんか
540デフォルトの名無しさん:2006/03/29(水) 12:19:00
最後の1つはprintfの%.3eでいいだろうし、上3つはMath::SigFigsのFormatSigFigsが
使えると思うから、値の範囲かなんかで場合分けしてそれぞれ食わせればいいんで
ないかな。
541539:2006/03/29(水) 23:21:01
>>540
出来ました。どうもです。

あと、CPANを漁っていたらNumber::Formatに似たような機能をみつけたので、
これを改変してもうまくいきました。

sub round {
my ($number, $digits) = @_;
my $sign = $number <=> 0;
my $result = abs($number);
my $index;
if($number =~ /(.*)e(.*)/) {
$result = $1;
$index = $2;
}
my $precision = $digits - length(int($result));
if($result =~ /^0(\.0*)/) {
$precision += length($1);
}
my $multiplier = (10 ** $precision);
$result = int($result * $multiplier + 0.5000001) / $multiplier;
$result = -$result if $sign < 0;
$result *= (10 ** $index) if $index;
return $result;
}
542デフォルトの名無しさん:2006/03/32(土) 03:59:17
$ip_sample = 222.4.xxx.xxx #フォームや環境変数から取得
$ip_data <<END_DATA;  #外部ファイルから読み込んだデータ(実際は約2万4千行程度)
国名A-221.184.0.0-221.191.255.255
国名B-221.240.0.0-222.15.255.255
国名C-222.144.0.0-222.151.255.255
END_DATA
foreach (@ip_data) {
($cctld,$ip_a,$ip_b) = split(/-/,$_);
if ( 判定ルーチン ){$ans = $cctld
last;
}
}
print $ans;#この場合は"国名B"と表示したい

$ip_dataを参照して$ip_sampleの値が$ip_dataのどの行に在るかの判定を行い
$ansへ該当する$ip_deta行の$cctldを返すようにしたいのですが
判定方法でつまずいています。gethostxxx関数を使えという方向は無しにして
元の$ip_dataを増やさずに行える極力短い判定のルーチンを教示おねがいします
このテの質問はwebプでやれと言われそうな気がするけど質問の内容が
板を選ぶ以前のレベルの自覚があるので敢えてこちらに投下しまふ。
543デフォルトの名無しさん:2006/03/32(土) 06:32:36
こういうパズル的なのはどこでも答えてもらえそう

my $target = "222.4.0.0";
my @iptable = qw( 国名A-221.184.0.0-221.191.255.255 国名B-221.240.0.0-222.15.255.255 国名C-222.144.0.0-222.151.255.255 );

$target = pack("C"x4, split(/\./, $target));

for(@iptable){
my($country, $from, $to) = split /-/;
$from = pack("C"x4, split(/\./, $from));
$to = pack("C"x4, split(/\./, $to));
if($from le $target && $target le $to){
print "$countryが範囲内でした\n"
}
}
544デフォルトの名無しさん:2006/03/32(土) 06:34:47
ありがとうございます
早速走らせて見ます


実は・・・・
- foreach (@ip_data) {
+ foreach ($ip_data) {
ですた、阿呆ですんませんです・・・ orz
545デフォルトの名無しさん:2006/03/32(土) 07:51:49
その2万4千行のデータの状態によっては物凄く処理速度に差が出そうだ。
データを読みながら1回から2万4千回判定するのがいいか、
全部配列に読み込んでおよそ5回判定するのがいいか。
546デフォルトの名無しさん:2006/03/32(土) 07:54:50
違った。14回?
547542:2006/03/32(土) 14:00:16
>>543
web鯖にはまだ置いてませんが手元の環境では問題なく動きました。
答えを教えてもらうと、なるほどなぁと納得行くのですが
その答えをせめて自分で作れるまでにはなりたいです。
ネットでも資料沢山あるけどラクダ本がほしくなったので
日曜日にでも街に探しにイッテキマス
目標は脱ド初心者w

>>545
できれば色々なパターンをベンチ取って一番軽い処理を使いたいですw
どうしても重かったらIP国別データを2〜3000行程度に分けて
IPの最初の8ビットを参照して呼び分けてみようかなと思ってますが・・・
548デフォルトの名無しさん:2006/03/32(土) 20:14:29
>>547
アルゴリズムの勉強したほうがいいよ。
>>545-546でバイナリサーチに気づかないのはかなり重症
549デフォルトの名無しさん:2006/04/02(日) 05:03:28
550デフォルトの名無しさん:2006/04/02(日) 05:08:26
スマソ。書き込む前に送信してもうた・・・

>>547
IPをキー、国名を値にもつハッシュを作り、データベースクラスにtieしてみては?
2万4千行をメモリに持つのはつらいと思う。
551550:2006/04/02(日) 05:38:58
ちょっと練習で書いてみた。IPは悩んだ末、強引に10進数に変換した。

my $data = <<EOF;
A-221.184.0.0-221.191.255.255
B-221.240.0.0-222.15.255.255
C-222.144.0.0-222.151.255.255
EOF
unlink 'test.db';
use Fcntl;
use DB_File;
tie my %db, 'DB_File', 'test.db', O_RDWR|O_CREAT, 0644, $DB_BTREE or die;
foreach(split/\n/, $data) {
my ($country, $from, $to) = split /-/;
for($from, $to) {
s/(\d+)\.(\d+)\.(\d+)\.(\d+)/$1*256**3+$2*256*256+$3*256+$4/e;
}
$db{$from-1} = 'N/A';
$db{$to} = $country;
}
untie %db;
sub find_country {
my $query = shift;
$query =~ s/(\d+)\.(\d+)\.(\d+)\.(\d)/$1*256**3+$2*256*256+$3*256+$4/e;
my $x = tie my %db, 'DB_File', 'test.db', O_RDONLY, 0644, $DB_BTREE or die;
my ($ip, $country) = ($query, 'N/A');
$x->seq($ip, $country, R_CURSOR);
return $country;
}

print find_country('221.239.0.1');
552デフォルトの名無しさん:2006/04/02(日) 06:41:56
# IPアドレス→32bit整数
$ip = unpack('N', pack('CCCC', split(/\./, $ip)));
これで2倍くらいの速度になった
キャプチャが大きいんかなぁ

2個目のIPアドレス変換部分、最後が\d+じゃなくて\dになってたよ。
桁数が多いから計算ミスかと思ったけど、数字が文字列として尻についてただけなんだね。
553デフォルトの名無しさん:2006/04/04(火) 17:06:58
>>552
use Socket; して inet_aton() 使ったら?
554デフォルトの名無しさん:2006/04/05(水) 11:25:50
ベンチしたらinet_aton意外にとてつもなく遅いです。あとは
・「.」でばらすのはsplitより正規表現でキャプチャする方が速い
・4つの10進数から32bit整数にするのは、シフト>掛け算>pack-unpackの順で速い。
552の言うのとは逆の結果になったわけだがなんでかね?

Benchmark: running inet_aton, multiple_re, shift_re, unpack_re, unpack_split for at least 3 CPU seconds...
inet_aton: 5 wallclock secs ( 1.62 usr + 1.46 sys = 3.08 CPU) @ 425.97/s (n=1312)
multiple_re: 7 wallclock secs ( 3.26 usr + 0.00 sys = 3.26 CPU) @ 229803.99/s (n=749161)
shift_re: 3 wallclock secs ( 3.08 usr + 0.03 sys = 3.11 CPU) @ 274049.84/s (n=852295)
unpack_re: 3 wallclock secs ( 3.10 usr + 0.00 sys = 3.10 CPU) @ 183073.87/s (n=567529)
unpack_split: 4 wallclock secs ( 3.13 usr + 0.00 sys = 3.13 CPU) @ 119672.52/s (n=374575)
555デフォルトの名無しさん:2006/04/05(水) 11:26:39

use Benchmark;
use Socket qw(inet_aton);
my $ip_a = 100.100.100.100;

timethese(undef,
{
unpack_split => sub {
my $ip = unpack('N', pack('CCCC', split(/\./, $ip_a)));
},
unpack_re => sub {
$ip_a =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
my $ip = unpack('N', pack('CCCC', $1, $2, $3, $4));
},
multiple_re => sub {
$ip_a =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
my $ip = $1*256*256*256 + $2*256*256 + $3*256 + $4;
},
shift_re => sub {
$ip_a =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
my $ip = $1 << 24 + $2 << 16 + $3 << 8 + $4;
},
inet_aton => sub {
my $ip = inet_aton($ip_a);
},
}
);
556デフォルトの名無しさん:2006/04/05(水) 12:29:42
すまん、どうにも直観と反する結果なのでさらに調べていたらなんのことはない
my $ip_a = 100.100.100.100;

になっていたorz... もちろん正しくは

my $ip_a = '100.100.100.100';

なのでベンチ取り直した。

Benchmark: running inet_aton, multiple_re, shift_re, unpack_re, unpack_split for at least 3 CPU seconds...
inet_aton: 3 wallclock secs ( 3.16 usr + 0.00 sys = 3.16 CPU) @ 267949.37/s (n=846720)
multiple_re: 3 wallclock secs ( 3.16 usr + 0.00 sys = 3.16 CPU) @ 69144.94/s (n=218498)
shift_re: 4 wallclock secs ( 3.11 usr + 0.00 sys = 3.11 CPU) @ 74248.87/s (n=230914)
unpack_re: 3 wallclock secs ( 3.21 usr + 0.00 sys = 3.21 CPU) @ 68071.03/s (n=218508)
unpack_split: 2 wallclock secs ( 3.13 usr + 0.00 sys = 3.13 CPU) @ 95474.76/s (n=298836)

まとめ:

inet_atonはやっぱり速いので、自分で書くのはやめよう。
557デフォルトの名無しさん:2006/04/05(水) 13:42:14
v文字列以外では
・ inet_atonはpackしたIPアドレス("100.100.100.100"なら"dddd")を返すのに、他は整数(1684300900)を算出している。
・ "+"演算子は"<<"演算子より優先度が高いため($1 << 24)とカッコで括らなければならない。

一応 sub getRandIPString { join '.', int rand 256, int rand 256, int rand 256, int rand 256; } といったものを用意して
全てバイナリ文字列を出力するコードにしてからベンチ取ったけど、inet_atonが常に1位だった。

今更だけど、後で直接比較可能にするための前処理として保存しとけば速度関係無かったね。
558デフォルトの名無しさん:2006/04/19(水) 06:59:49
Mac OS XでPerlを使っています。
Macで作成したテキストを処理したいのですが、改行コードがCRになるのでうまく処理できません。
LFでないため、全て1行として認識されてしまいます。

標準入力を常にLFとして読み込んだ後、それに対してマッチや置換を行いたいのです。
以下のように書いてみましたけどダメでした。

while (<>) {
s/\x0D\x0A|\x0D|\x0A/\x0A/g;
if (/aaa/) {
print;
}
}

出力されたデータはLFになりましたが、マッチはうまくいきませんでした。
何かいいやり方はないものでしょうか。
559デフォルトの名無しさん:2006/04/19(水) 09:14:57
求めてるのは<>使う前の $/ = "\x0D"; か /aaa/m あたりかも
560558:2006/04/19(水) 19:51:43
>559さん

入力時の区切り文字をCRに決めてやればいいんですね。
解決しました。ありがとうございました。
561デフォルトの名無しさん:2006/04/19(水) 23:24:22
すいません。行のナンバリングをリクエストしてもよろしいでしょうか。

あいうえお(段落1)
かきくけこ(段落2)
さしすせそ(段落3)

たちつてと(段落4)
なにぬねの(段落5)
はひふへほ(段落6)

という文章があって、これを、

1:あいうえお(段落1)
2:かきくけこ(段落2)
3:さしすせそ(段落3)

1:たちつてと(段落4)
2:なにぬねの(段落5)
3:はひふへほ(段落6)

のように空行をはさんで新たにナンバリングを開始したいのですが方法が思い浮かびません。
562デフォルトの名無しさん:2006/04/19(水) 23:59:01
言いたいことが分からんが新たにナンバリングを開始したいところで
ナンバリング用の変数を初期化して空行を出力するだけじゃないのか?
563デフォルトの名無しさん:2006/04/20(木) 02:27:54
>>561は、単純にすべての行に通し番号でナンバリングするプログラムは作れるのか?
564561:2006/04/20(木) 23:04:01
>563

あっ、はい。

my $i = 0;

while (<STDIN>) {

if (/^./) {
print ++$i;
print ": ";
print;

}

}
ちょっと冗長ですけど。
565デフォルトの名無しさん:2006/04/21(金) 00:11:57
うーん、、、自分で作りたい?それとも誰かにサクッと作って欲しい?
566デフォルトの名無しさん:2006/04/21(金) 10:46:46
>>564
そこまでかけるなら
else で $i = 0; を書けないか?
567デフォルトの名無しさん:2006/04/21(金) 10:55:29
空行が来たらカウントをリセットする、というと、こんな感じ?

$n = 1;
while (<>) {
 $n = 1 if (/^\s*$/
 print "$n: $_";
 $n++;
}
568デフォルトの名無しさん:2006/04/21(金) 10:58:13
あ、閉括弧とか忘れた。まあいいや。脳内で修正してくれ。
569561:2006/04/21(金) 22:35:44
>566

elseを使っても結果が変わらないんです。
マッチがヘボいんでしょうか。

>567

実行させると入力がぶっとんでしまいました…

>565

いろいろ試してみたのですが、自分の力ではムリっぽいです…
あつかましいとは承知していますが、作っていただくと助かります。
570561:2006/04/22(土) 19:48:05
出来てしまいました!

my $i = 0;
while (<STDIN>) {
 if (/^..+/) {
 print ++$i;
 print ": ";
 print;
 } else {
 $i = 0;
 print;
 }
}

else文で「my $i = 0;」にしていたのがまずかったようで、
空行になっても$iが初期化されなかったみたいです。
レス下さったみなさん、ありがとうございました。
おさわがせしました。
私ってPerlの才能ないのかな…
571デフォルトの名無しさん:2006/04/23(日) 05:53:25
>>570
完成おめ!
才能がどうかは知らないけど、結局経験じゃないですかね?
俺も本スレで叩かれたりしながら勉強してますw

一応俺が用意してたスクリプト貼っておきます。。。
use strict;
my $c = 1;
open IN, 'filename';
while (<IN>) {
    (/^$/) ? $c = 1 : print $c++ . ':';
    print;
}
close IN;
572561:2006/04/23(日) 12:42:55
>571

ありがとうございます。
自分のはだいぶ冗長だと思うので、用意していただいたスクリプトを参考にさせていただきます。
今自分の書いたものを見直してみると、if (/^./)でいいですよね...
恥ずかしい...
573デフォルトの名無しさん:2006/04/23(日) 14:49:38
>>570
myはローカル変数の宣言。単なる代入では無いよ。
myを使うと、同名の新たな一時変数を作る事になる。
んで、詳しい条件は忘れたが、ブロック抜ける時とかに消える。

長いコードになると
「この変数名って他で使われて無かったっけ…?」
ってなるけど、my使えばそんな心配が減るワケ。
574デフォルトの名無しさん:2006/04/23(日) 18:39:57
>>558

>>560では解決しちゃったみたいだけど、これ俺も知りたい。
コマンドラインから入力されたテキストの改行コードをLFに統一、
という前処理をしてからwhileループ処理をかますってできるのかな?
あんまりセパレータとか変えたくないんで。
575デフォルトの名無しさん:2006/04/23(日) 21:25:04
>>574
>セパレータとか変えたくない

なんで?
576デフォルトの名無しさん:2006/04/23(日) 22:10:27
>575

セパレータも一文字として認識されてしまわない?
回避する方法があればいいんだけど。
577デフォルトの名無しさん:2006/04/23(日) 23:08:11
認識できるから区切れるんだが。
いまいち言いたいことが分からん。
578デフォルトの名無しさん:2006/04/23(日) 23:40:26
メタキャラ「.」って改行を除く一文字にマッチするじゃん。
でも「.」もCRにマッチしちゃわね?
LF読み込むときと処理が変わっちゃうからイライラすんだよね。
579デフォルトの名無しさん:2006/04/24(月) 00:10:50
自分の都合に合わせてセパレーター変えるなり置換するなりすりゃいいじゃん。
580デフォルトの名無しさん:2006/04/24(月) 03:57:29
あーいう変数ってlocal出来ないっけ?
581デフォルトの名無しさん:2006/04/24(月) 23:15:36
whileで読み込む前に処理しとくって、
できないってことでおk?
582デフォルトの名無しさん:2006/04/25(火) 04:35:21
質問は質問スレ行け
583デフォルトの名無しさん:2006/05/01(月) 22:52:12
Win32::GUI::ListView ソートメソッドないじゃん・・・orz

 た・・・す・・・け・・・て・・・・
584デフォルトの名無しさん:2006/06/15(木) 22:54:05
りすとびゅーか...
なにもかもがな・・つ・・か・・し・・ぃ・・
585デフォルトの名無しさん:2006/06/16(金) 20:37:02
一瞬、不治痛の電子帳票ソフトかと思った
586デフォルトの名無しさん:2006/07/09(日) 11:10:16
初めまして。

浅知恵で掲示板の改造を試みています。
オートリンク機能付き掲示板に記事修正機能を追加したのですが、
記事修正をするたびに、文中にあるリンク先が
<A href=http://www.a.b.c target=_blank><A HREF=http://www.a.b.c target=_blank>
http://www.a.b.c</A></A>
と、タグが無制限に追加されていきます。

そこでお願いしたいのは、
記事修正時にファイルに保存されているデータ
----------------------------------------------
<A HREF=http://www.a.b.c target=_blank>
http://www.a.b.c</A>
----------------------------------------------
を一端
----------------------------------------------
http://www.a.b.c
----------------------------------------------
というデータに戻すサブルーチンを作成したいのですが、
行き詰まっています。
よろしくお願いします。

オートリンク機能のスクリプトは以下の通りです。
***************************************************************
#オートリンク
sub auto_link {
my($msg) = $_[0];
$msg =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#]+)/$1<A HREF=$2 target=_blank>$2<\/A>/g;
return $msg;
}
587デフォルトの名無しさん:2006/07/09(日) 11:15:33
↑ ありゃ、文字がおかしい。

全角にしてありますが、Aタグです。
http://www.a.b.c の後ろは、</A>
588デフォルトの名無しさん:2006/07/10(月) 01:11:44
そういう時は表示時にオートリンクを適用すればいい。
保存時にいじっちゃうと後でいじりにくくなるというのは定説。
ファイル構造上、改行の置換とかは仕方無いと思うけどさ。
589デフォルトの名無しさん:2006/07/10(月) 10:01:41
>>586

ようするに、すでに<A>タグ化されている部分を除外すればいいわけだな?
590デフォルトの名無しさん:2006/07/10(月) 10:03:49
ああ、ごめん。>>586にいての>>588の意見を読んでなかった。
確かに保存時は生データのまま記録し置いて、閲覧時に
http:なんた
591デフォルトの名無しさん:2006/07/10(月) 10:06:04
>>590
途中で送信しちゃった。

保存時は生で。閲覧時は「http:なんたら」の条件で抽出→<A>タグ化のほうが効率的だね。
592586:2006/07/10(月) 14:07:06
みなさん、ありがとうございました。
発想の転換ですね。
私の堅い頭では思いつきませんでした。

保存時ではなく、表示時にオートリンクを適用でうまくいきました。
ありがとうございました。
593デフォルトの名無しさん:2006/07/18(火) 22:59:04
俺は全く解らないので、申し訳ないけど誰かに頼みたいorz
ボタンを押したらカウントが増えるシンプルなシステムを作って欲しいです。
594デフォルトの名無しさん:2006/07/19(水) 02:59:10
どこにでもあると思うが…
595デフォルトの名無しさん:2006/07/19(水) 16:54:07
>>593

use CGI;
my $cgi=new CGI;
my $n=$cgi->param('n')+1;
print $cgi->header(-charset=>'Shift_JIS'),
$cgi->start_html(-lang=>'ja',-encoding=>'Shift_JIS',-title=>'simple count'),
$cgi->a({href=>"$ENV{'SCRIPT_NAME'}?n=$n"},$n),
$cgi->end_html;
596デフォルトの名無しさん:2006/07/20(木) 00:02:04
>>593

<?php
if (! $HTTP_COOKIE_VARS{'Num'}) {
$start=0; $i=1; setcookie("Num",$i,time()+30);
} else {
$i=$HTTP_COOKIE_VARS{'Num'}+1;
setcookie("Num",$i,time()+30);
}
echo $start.$HTTP_COOKIE_VARS{'Num'}."<br>\n";
echo "<form method=POST action=><input type=submit value=count_up></form>\n";
?>
597デフォルトの名無しさん:2006/07/20(木) 01:41:37
>>593
<input type="button" value="0" onclick="this.value++">
598デフォルトの名無しさん:2006/07/20(木) 02:06:11
どんどん簡易な物になってくな
599デフォルトの名無しさん:2006/07/20(木) 20:10:06
つーかスレタイに反してPerlですらなくなってるな
このスレ自体がアレなのは確かだが
600デフォルトの名無しさん:2006/07/21(金) 00:49:26
待て待て、Web物とは一言も言ってないぞ?

# CUI
use Term::ReadKey;
binmode STDIN;
ReadMode 3;
print my $count = 0;
print "\r", ++$count while (defined ReadKey 0);
ReadMode 0;

# GUI(Perl/Tk)版
use Tk;
my $count = 0;
my $mw = MainWindow->new();
my $label = $mw->Label(-text => $count)->pack();
$mw->Button(
-text => 'Count up',
-command => sub { $label->configure(-text => ++$count) },
)->pack();
MainLoop;
601デフォルトの名無しさん:2006/07/21(金) 12:46:48
Term::ReadKey を入れてないおいらが来ましたよ。

#!/usr/bin/env perl
print my $i = 0 ; $i ++ ;
system "stty -echo" ;
print "¥e[1K" . $i ++ while <STDIN> ;
system "stty echo" ;

このスクリプト ( hoge.pl )、perlcc が通ったのには笑った。@5.6.6
perlcc -o counter hoge.pl
602デフォルトの名無しさん:2006/07/21(金) 13:24:24
なんで笑えるのかわからんが、もっと短くしてみた。
perl -e '`stty cbreak -echo`;print $i++,"\r" while getc'
603デフォルトの名無しさん:2006/07/21(金) 13:49:37
cbreakはサポートしてないものもあるよ
604デフォルトの名無しさん:2006/07/21(金) 17:11:49
>>602
いや system 関数ってみるからにコンパイルの時コケそうじゃないですか。
605デフォルトの名無しさん:2006/08/06(日) 00:00:47
頭が混乱してきた。
ETRADEのポートフォリオのページを取得するスクリプトつくって。

6時間考えたけど、いっぱいいっぱい。だめぽ
606デフォルトの名無しさん:2006/08/06(日) 00:29:53
既製品を探すという作業を飛ばしたようだね。
607デフォルトの名無しさん:2006/08/06(日) 00:52:42
>>605 だけど。
やっとできたよ。

しばらく POSTとGETの仕組みと INPUTタブの仕組みを
忘れてた。

608デフォルトの名無しさん:2006/08/06(日) 03:44:01
inputタブだってよ
609デフォルトの名無しさん:2006/08/08(火) 10:10:47
ディレクトリ内にある.jpgファイルを全て
1.jpg, 2.jpg, 3.jpg, ... というように連番のファイル名に変換するプログラムを
つくって頂けませんか。
そのディレクトリには.jpgファイルしか置いてません。(全部変換する)
もともとのファイル名は、*****.jpg もしくは ******.jpg (*は数字)
という形です。
こういうプログラムを作るのにperlが適しているのかどうかはわからないのですが、
他に作成依頼できそうなスレがみつからなかったので。

お願いします。
610デフォルトの名無しさん:2006/08/08(火) 10:16:02
folderの中にある複数の圧縮ファイル(zip, rar)の中のファイルの情報の一覧(text fileでOK)
を作ってくれるscriptがほしいです。
611デフォルトの名無しさん:2006/08/08(火) 10:55:06
>>609
perl -e'my $i = 1; foreach(glob("*.jpg")) { rename $_, "$i.jpg"; $i ++;}'
動くかどうかはしらん
612609:2006/08/08(火) 11:52:55
>611
できてるぽいです!
ありがとうございます。
613デフォルトの名無しさん:2006/08/08(火) 16:23:26
アクセスしてきたPCのポートスキャンをするcgi
目的:自分のPCのセキュリティーチェックをしたいので
614デフォルトの名無しさん:2006/08/08(火) 18:06:17
嘘付け
615613:2006/08/08(火) 18:24:59
最初はIPアドレスを入力して入力されたIPをもつPCのポートスキャンができるようにとおもったのですが、
>>614さんのように邪推される方がいると思ったのでアクセスしてきたPCのポートスキャンということにしました。
さらにいうなら、IDパスワード認証をしてそのチェックを通過した人だけセキュリティーチェックできるようにお願いします。
もっともIDパスワードをさらしておいて他人のPCのポートスキャンができることも懸念されますが・・・・。。
616デフォルトの名無しさん:2006/08/10(木) 16:45:15
>>610
while (<*>) {
 if ((/\.zip$/i) or (/\.rar$/i)) {
  open(AAA, "unrar l $_ |") || die "err";
  $list = <AAA>;
  close(AAA);
 }
}
こんなもんで、よろしいんじゃないですか?
617デフォルトの名無しさん:2006/08/24(木) 20:33:41
perl -e '`stty cbreak -echo`;print $i++,"\r" while getc'
618デフォルトの名無しさん:2006/08/30(水) 14:53:13
LINUXのCRONで動かしているPerlがあるんだが、自分自身2重起動を阻止したい。
リクエストお願いします。
619デフォルトの名無しさん:2006/08/30(水) 15:34:33
>>618
例えばlockファイルを使う。perldoc -q lock

use Fcntl qw(:DEFAULT :flock);

sysopen(LCK, "/tmp/lockfile", O_WRONLY|O_CREAT) or die "open: $!\n";
flock(LCK, LOCK_EX|LOCK_NB) or die "flock: $!\n";

sleep 100;
620デフォルトの名無しさん:2006/08/31(木) 19:03:19
なんじゃそりゃ
621デフォルトの名無しさん:2006/09/07(木) 21:41:40
5分経過したら再認証のページに飛ぶものを作って下さい。
お願いします。。。
622デフォルトの名無しさん:2006/09/07(木) 21:50:03
>>621
仕様がはっきりしなさ過ぎて無理
623デフォルトの名無しさん:2006/09/07(木) 22:12:49
>622
タイムアウト処理だけでも無理ですか?
624デフォルトの名無しさん:2006/09/07(木) 23:40:42
同じ学校のやつか?

964 名前:デフォルトの名無しさん 投稿日:2006/09/07(木) 21:36:27
質問です!
ログインして10分経過後、再認証を行なうプログラムについて教えて下さい。
学校の課題なんですがさっぱり分りません。。。
625デフォルトの名無しさん:2006/09/08(金) 00:13:21
マルチかよ
626デフォルトの名無しさん:2006/09/08(金) 16:15:04
>>623
sleep(300);
627デフォルトの名無しさん:2006/09/08(金) 19:48:59
>>621

 鯖に「ID=************が何時何分何秒にログインした」ってファイルを
作っておいて、その人がCGIにアクセスするたびに最終ログイン時刻を
チェックする。規定時間をオーバーしていると、ログイン画面に飛ばす。

って感じのやつはダメ?
628デフォルトの名無しさん:2006/09/12(火) 05:37:49
そーいや前に、タイムアウトの処理を
HTMLのタグでやってるの見たことある

ブラウザ側で簡単に回避されるっての…w
629デフォルトの名無しさん:2006/10/22(日) 15:34:50
マルチにマジレス カコワルイ
630デフォルトの名無しさん:2006/10/23(月) 11:35:28
質問させてください

「開始」と「終了」の間に入っている文字列をリンクアドレスにするにはどうすればいいですか?

たとえば$STR="開始test.html終了"; とあったとき
出力結果が

<a href=test.html>test.html</a>になるようにしたいんです。


$START="開始";
$END="終了";
631デフォルトの名無しさん:2006/10/23(月) 12:07:01
2chに書き込むスクリプトってどうやるんですか?
632デフォルトの名無しさん:2006/10/23(月) 12:34:24
2ちゃんねる2GETスクリプトの改良おねがいします
http://pc8.2ch.net/test/read.cgi/tech/1161552012/
633デフォルトの名無しさん:2006/10/23(月) 12:46:54
Perlでつくってください
634デフォルトの名無しさん:2006/10/23(月) 13:30:24
>>630
正規表現で一発やん
635デフォルトの名無しさん:2006/10/23(月) 14:49:23
>>634
ごめんなさい、わからないんです。
とりあえず、ここまでは出来ました
「開始」と「終了」に挟まれる$1を抽出した後、その$1をURL形式に変えてアドレスにして置き換えていきたいんです。

例えば
$in{'data'}="開始なにか終了hogehogehoge開始てすと終了"だったとしたら
これが

$in{'data'}="<a href=http://hoge.com/hoge.cgi?keyword=%42%28%39>なにか</a>hogehogehoge<a href=http://hoge.com/hoge.cgi?keyword=%32%86%26>てすと</a>"

みたいな形式に置き換えたいんです


use URI::Escape;
$START="開始";
$END="終了";
$SEARCHADD="http://hoge.com/hoge.cgi?keyword=";

while ($in{'data'}=~ m/$START(.*)$END/g) {
$output = $1;
$urikeyoutput = uri_escape($output);
$in{'data'} =~ s/$START$output$END/<a href=$SEARCHADD$urikeyoutput>$output<\/a/g;
}
636デフォルトの名無しさん:2006/10/23(月) 16:03:57
>>635
> while ($in{'data'}=~ m/$START(.*)$END/g) {

これを

while ($in{'data'}=~ m/$START(.*?)$END/g) {

ってすりゃいいんじゃないか?
(.* じゃなくて .*? ってことね)
637デフォルトの名無しさん:2006/10/23(月) 16:23:43
>>636
変えてみましたけど、無理でした
while ($in{'data'}=~ m/$START(.*?)$END/g) { の時点で拾ってきてくれてないみたいです
書き方おかしいですか?
638デフォルトの名無しさん:2006/10/23(月) 16:53:05
>>637
while ($in{'data'}=~ m/$START(.*)$END/g) { ... の中で更に
$in{'data'} =~ s/$START$output$END/ ... なんてしてるから
マッチ開始位置がおかしな事になる。下の一文で済む。

$in{'data'} =~ s{\Q$START\E(.*?)\Q$END\E} {
  my $url = $1;
  my $query = uri_escape($url);
  qq|<a href="$SEARCHADD$query">$url</a>|;
}eg;
639デフォルトの名無しさん:2006/10/23(月) 16:58:47
>>638
ご回答ありがとうございます。
その方法で問題なく出来ましたが

開始、終了のペアが2つ以上でてきた場合エラーが発生します。

$in{'data'} ="開始テスト1終了開始テスト2終了";
だったとき

最初の開始から 最後の終了までを1つだと思っているみたいです
640デフォルトの名無しさん:2006/10/23(月) 17:16:50
>>639
大方 (.*?) を (.*) と写し間違えているんだろう。
641デフォルトの名無しさん:2006/10/23(月) 17:19:31
>>640

>>638さんのものを、そのままコピペして使ってるのですが
>>639に書いた症状が出ます
642デフォルトの名無しさん:2006/10/23(月) 18:37:03
643デフォルトの名無しさん:2006/10/31(火) 00:40:22
データが壊れないカウンタを20行で作ってみてください
644デフォルトの名無しさん:2006/10/31(火) 01:27:13
なんのカウンタだよアホ
645デフォルトの名無しさん:2006/10/31(火) 02:57:14
ロックファイルを作りながら
カウントしていくだけのプログラム
646デフォルトの名無しさん:2006/11/01(水) 13:23:42
だから何をカウントするんだよ。
CGIなら板違いだ
647デフォルトの名無しさん:2006/11/01(水) 17:57:33
++$count;

完成!
648デフォルトの名無しさん:2006/11/03(金) 11:41:54
画像の横幅を習得するにはどうすればいいんですか?
649デフォルトの名無しさん:2006/11/03(金) 12:19:20
>>648
search.cpan.org
650648:2006/11/03(金) 12:26:30
すみませんが、自己解決しました。
651デフォルトの名無しさん:2006/11/03(金) 13:29:13
解答が出たあとに自己解決かw
652デフォルトの名無しさん:2006/11/03(金) 19:53:30
>>643
これでいいんか?

open my $fh, ">>count.dat";
print $fh "\n";
close $fh;
print "Content-Type: text/plain\n\n";
print -s "count.dat";
653デフォルトの名無しさん:2006/11/03(金) 21:29:16
>>652
壊れないけど取りこぼすな。でも「壊れない」条件は満たしてるからいいのか。
軽いカウンタならutimes使って作るといいよ。inodeしか触らない。
654デフォルトの名無しさん:2006/11/06(月) 20:34:43
>>653
utimes?
utimeじゃなくて?

ていうかどちらにしろファイルのタイムスタンプ変更するだけの関数だから
カウンタにはできないのでは?
655デフォルトの名無しさん:2006/11/07(火) 02:45:23
>>654
タイムスタンプは time_t 型の数値を保存できる場所でな。
656デフォルトの名無しさん:2006/11/08(水) 14:02:06
>>655
あ。なるほど。タイムスタンプを無理矢理カウンタとして使うのか。
たしかにできるけど、強引な方法だな・・・。
657デフォルトの名無しさん:2006/11/08(水) 21:11:30
それどうやって排他するん?
658デフォルトの名無しさん:2006/11/08(水) 22:21:24
>>657
普通にflockなりなんなりお好きな方法で。
659デフォルトの名無しさん:2006/11/12(日) 23:53:28
@CSV = <INCSV>;
$line_amount = @CSV + 1;
$lines = do { local $/; <INTEXT> };
@Aitems = map {(split '\t', $_, 2)[0]} @CSV;
@Bitems = map {(split '\t', $_, 2)[1]} @CSV;
@A = @Aitems;
@B = @Bitems;
chomp (@B);
for ($i = 0; $i < $line_amount; $i++){
$lines =~ s/$A[$i]/$B[$i]/g;
}
print OUT $lines;
-------------
タブ区切りで、検索文字列[TAB]置換文字列
というテキストを作って、それを読み込んで置換するスクリプトなのですが、
一応動作はするものの、置換文字列に $1, $2 など後方参照の変数がそのまま
文字列として出てきてしまいます。これを展開できるようにするには
どうすればいいのでしょうか。
660デフォルトの名無しさん:2006/11/13(月) 11:16:41
/e
661デフォルトの名無しさん:2006/11/13(月) 17:33:14
>660
だめでした。
$lines =~ s/$A[$i]/$B[$i]/ge;

置換失敗、($1)という文字列が出ます
s/「(.*?)」/($1)/ge;

こういうのは置換成功(eなしで問題なし)
s/(あ)\1/嗚呼/g;
662デフォルトの名無しさん:2006/11/14(火) 16:02:15
/ee
663リクエスタ:2006/11/16(木) 23:38:52
横一列に並んだ単語を縦一列に直すスクリプトをリクしたいっす


↓ 単語が横一列になっているファイルを(ファイル名は例えば sample1.txt )
globe apple captain delicate baseball e-mail family

↓こんな感じに縦列に並べ変えたい
globe
apple
captain
delicate
baseball
e-mail
family
664デフォルトの名無しさん:2006/11/16(木) 23:44:17
エディタで空白を改行に置換したらいいやん
665663:2006/11/17(金) 00:00:18
あ、そっかwwww

sed 's/ /\n/g' sample1.txt > sample2.txt
でできましたw
666デフォルトの名無しさん:2006/11/17(金) 12:04:26
my (%data);
my $num1 = 3;
my $num2 = 4;
my $moji =tetra;

$data{$moji} = [ $num1, $num2 ];

print("%d",$data{$moji});


perl 実行
%dARRAY(0x85a7c28

何かよくわからない結果になってしまったのですが・・・
667デフォルトの名無しさん:2006/11/17(金) 12:09:58
こっちで聞いても同じだぞ
668デフォルトの名無しさん:2006/12/06(水) 15:03:15
掲示板(KENT e-pad)を10分毎に監視して
新規の書き込みがあった場合、内容をメールで送るスクリプト作って下さい。
669デフォルトの名無しさん:2006/12/06(水) 16:19:01
>>668
じゃあ雛型だけ。あとは getbbs() と sendmail() を作れば完成だ。がんばれ。

#!/usr/bin/perl -w

use strict;

my $olddata;
for (;;) {
 # 掲示板の内容を取得する。
 my $data = getbbs();
 if (defined($olddata) && $data ne $olddata) {
  # メールを送信する。
  sendmail($data);
 }
 $olddata = $data;
 sleep 60 * 10;
}
670デフォルトの名無しさん:2006/12/06(水) 16:35:42
ぎゃふん!
671デフォルトの名無しさん:2006/12/06(水) 17:34:31
sendmail のサンプル

sub sendmail {
 my $data = shift;
 open(F, '| /usr/lib/sendmail -t >/dev/null 2>&1') or die;
 print F "From: hoge\@fuga.com\n";
 print F "To: moga\@mugu.com\n";
 print F "MIME-Version: 1.0\n";
 print F "Content-Type: text/html\n";
 print F "\n";
 print F $data;
 close(F);
}

但し /usr/lib/sendmail がなければならない。
(つまりこれは主に UNIX 系 OS 向け。Windows なら Cygwin 環境で動くかも)。
672デフォルトの名無しさん:2006/12/06(水) 18:26:52
>>669>>671
有難う。
getbbs()
も雛形お願いします。
673デフォルトの名無しさん:2006/12/07(木) 14:00:49
getbbs のサンプル

use LWP::Simple; # これはプログラムの最初に書く。

sub getbbs {
 my $url = 'http://...' # これは実際のURLにする。
 return get($url);
}

ていうかこんなサブルーチン使わないでそのまま get() やっちゃえばいいかな。

上記のように LWP::Simple を使って串を通したい場合は環境変数の http_proxy
に串のURLをセットしておく ( proxy.hoge.com のポート 8080 の場合は
http_proxy に http://proxy.hoge.com:8080/ をセットしておくか
perl プログラムの中で $ENV{'http_proxy'} = 'http://proxy.hoge.com:8080/';
をやっておく)。
LWP::UserAgent を使って自分で色々する場合は $ua->proxy(...) のような
設定方法も使える。
674デフォルトの名無しさん:2006/12/07(木) 15:38:14
>>673
ありがとうございます。
試してみます。
675デフォルトの名無しさん:2006/12/08(金) 23:46:45
組織名 人名 番号(英字3つの後に数字7つ)
組織名 人名 番号(英字3つの後に数字7つ)
という風に並んでるファイルから
番号だけを取り出して
07.番号(英字3つの後に数字7つ)
と書き換えたいのですがお願いします

また、自分でもこういう丸投げはやっぱりよくないとは思うのでもし
「そんなのここ見りゃかいてあるから」みたいなサイトがあれば教えてください
676デフォルトの名無しさん:2006/12/09(土) 00:06:03
「正規表現」は知ってる?
各行の最後の10文字の前に「07.」を割り込ませる、って考えでどうだ?
677デフォルトの名無しさん:2006/12/10(日) 09:25:32
>>666
printfの間違い。
$data{$moji}は配列へのリファレンスになっているんだから、
$data{$moji}[0]なり$data{$moji}[1]なりにしないとそうなる罠。
678デフォルトの名無しさん:2006/12/10(日) 21:28:17
use Kakiko::Test;
679デフォルトの名無しさん:2006/12/15(金) 19:41:49
>>675
perl -ne 'if(/\s+(\w{3}\d{7})\s*$/){print "07.$1\n"}' hoge.txt
680デフォルトの名無しさん:2006/12/19(火) 23:02:55
FORMで受け取った文字列をCSVファイルから検索して表示させるスクリプト下さい
681デフォルトの名無しさん:2006/12/20(水) 09:56:03
grep
682デフォルトの名無しさん:2006/12/21(木) 14:24:02
「1からnまでの乱数をn個発生させ、小さい方から並べるプログラム」を作成する。
nの値をさまざまに変えて実行時間を計測せよ。
クイックソートの実行時間が理論値O(n log2 n) となるかどうか検証せよ。
683デフォルトの名無しさん:2006/12/21(木) 14:29:11
このデータと解析結果、検証の結果をレポートで提出せよ。
684デフォルトの名無しさん:2006/12/22(金) 02:32:04
>>681
便乗でスマンがFORMからのデータの受け取りを
cgi-lib.plに頼らない為のヒントを教えてほしい。
685デフォルトの名無しさん:2006/12/22(金) 03:05:30
getならurl末尾、postなら標準入力
意地悪じゃなく調べればいくらでもあると思うんだが…
686デフォルトの名無しさん:2006/12/22(金) 10:23:07
CGI.pm使えよ
687デフォルトの名無しさん:2006/12/22(金) 10:58:44
>>684
CGI, 環境変数, あたりでぐぐれ
688デフォルトの名無しさん:2006/12/22(金) 22:53:42
>>685-687
ありがとね。
参考書に「難しいからcgi-lib.pl使え」ってあったから
勝手にその事については載ってないと思った。
まぁ習い始めたばかりだけど、調べたりなかったのは反省してる orz
689デフォルトの名無しさん:2007/01/11(木) 00:57:44
1分に一度指定板のスレッド一覧を取得して更新があれば差分だけダウンロードして元のファイルに付け足して保存する。
ってのをPerlで作ってくれ。
いや、作ろうとしたんだよ。でも2chのページにアクセスすると403がでてな。
690デフォルトの名無しさん:2007/01/11(木) 01:27:11
>>689
オイスター作戦でぐぐれ。
691デフォルトの名無しさん:2007/01/11(木) 01:41:41
つまりMonazilla MLに参加してるツールに成りすませばいいってこと?
それとも不可能ってことかな?
692デフォルトの名無しさん:2007/01/11(木) 02:08:36
リクです。
youtube内にアップされている動画のタグ情報を引っ張って来れるプログラムをお願いします。

#!/usr/bin/perl -w

use strict;
use LWP::UserAgent;

my $url = shift @ARGV;

my $ua = LWP::UserAgent->new();
$ua->agent('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1);');


my @tags = &getTag($url);
print join(",", @tags), "\n";

sub getTag {
    my ($url) = @_;
    my @tags;
    my $content = $ua->get($url)->content;
    while($content =~ /href=\"\/results\?search_query=(.+?)\"/g){
push(@tags, $1);
    }
    return(@tags);
}

ここまで行ってるのですが、入力する動画URLの取得を自動化したいんです。
693デフォルトの名無しさん:2007/01/19(金) 10:09:16
http:// から始まるIPとホストが書いてあるアドレスを抽出したい場合の
IPとホストの表現を教えてください。

694デフォルトの名無しさん:2007/01/19(金) 10:52:03
ttp://www.din.or.jp/~ohzaki/perl.htm#httpURL
あるいは
use Regexp::Common; して $RE{URI}{HTTP}
695デフォルトの名無しさん:2007/01/19(金) 17:08:25
>>694
ありがとうございます
696デフォルトの名無しさん:2007/01/20(土) 23:57:02
HP等の日記にパスワードがかかっていた場合、
そのパスワードを解析してくれるソフト作ってください。。。
697デフォルトの名無しさん:2007/01/21(日) 00:17:41
不正アクセス禁止法違反。
698デフォルトの名無しさん:2007/01/21(日) 03:56:05
すべてのパスワードを解ける解法があったとしても
すべてのパスワードを解けるプログラムやスクリプトは絶対にない
699デフォルトの名無しさん:2007/01/21(日) 06:00:58
>>698
時間を掛ければ何でも解けるのでは?
但し何万年とか掛かるかも知れないが。
700デフォルトの名無しさん:2007/01/25(木) 01:00:43
>>1

微分や積分するプログラムってperlで作れる?
701デフォルトの名無しさん:2007/01/25(木) 01:51:10
数値微分/数値積分なら公式は山ほどあるだろ。

マセマティカ並の数式処理能力が欲しければ数学科大学院へでも池
702デフォルトの名無しさん:2007/02/06(火) 21:56:03
Win NTでデフォルトのプリンター名を取得したいのですが。
703デフォルトの名無しさん:2007/03/16(金) 00:51:22
重機ネット上にあるDBから
氏名と電話番号を一覧表示するスクリプトを作ってください
704デフォルトの名無しさん:2007/03/16(金) 16:19:10
>>703
まず重機ネットのDBから氏名、電話番号の入ったデータをCSV形式で貰ってきます。
その後次のスクリプトを動かしてください。

#!/usr/bin/perl -w

use strict;

system('cat ファイル名');

以上です。
705デフォルトの名無しさん:2007/03/21(水) 01:14:58
重機ネット上にあるDBに対してCRUDするスクリプトを作ってください。
706デフォルトの名無しさん:2007/03/21(水) 17:37:51
一休さんかよ
707デフォルトの名無しさん:2007/03/26(月) 17:57:58
とんち比べですな。
708デフォルトの名無しさん:2007/04/25(水) 21:54:31
数字を月の名前に変換するコードができました!!

@Month = ("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

sub mmm {
return $Month[(shift)-1];
}

@Month を切り替えればいろいろな名前に変換できると思います。
@Month = ("JAN.", "FEB.", ……
@Month = ("睦月", "如月", ……
709デフォルトの名無しさん:2007/04/26(木) 12:04:47
釣れまsk?
710デフォルトの名無しさん:2007/04/26(木) 16:47:33
どなたか、ナンプレを解くスクリプト作って下さいませんか?
711デフォルトの名無しさん:2007/04/26(木) 19:12:12
sudoku solver でググれ
712デフォルトの名無しさん:2007/04/27(金) 12:52:11
>>708
perl -MDate::Manip -e 'print UnixDate(ParseDate("today"),"%B"),"\n";'
713708:2007/04/27(金) 20:32:47
利点としては:
・ハッシュを使うコードよりも軽量・高速。
・「01」とか、ゼロ付きの数字にも対応。

欠点としては:
・逆引きができない。

というわけで、"JAN.."とか"睦月"から数字への変換と、数字から名前への変換、
両方ともできる粋なコードをおながいします。
714デフォルトの名無しさん:2007/05/03(木) 07:48:33
質問箱に書き込んだのですが、スレタイからするとこちらの方がよいかもと思い、書き込ませていただきます。
マルチポストをお許し下さい。

perlはまるっきりの初心者です。どなたかお知恵を貸して下さい。
2つのファイル a.txt と b.txt を比較して、条件にあった行を抽出、出力するスクリプトを作りたいのです。

具体的には、
[a.txt]
ID, field1, field2
1, 5.8, 7.3
2, 6.3, 8.2
3, 3.2, 4.1
4, 4.8, 4.0
5, 8.3, 10.2

[b.txt]
ID, field1, field2
1, 6.8, 7.7
3, 4.3, 5.5
4, 5.9, 4.9

というファイルがあったとき、b.txt のIDに数値が存在する行だけを a.txt から抽出して a2.txt として保存したいのです。

[a2.txt]
ID, field1, field2
1, 5.8, 7.3
3, 3.2, 4.1
4, 4.8, 4.0

と言った具合にです。よろしくお願いします。
715714:2007/05/03(木) 08:04:26
自己レスです。
質問箱の方で回答を頂きました。マルチポスト失礼しました。
あ、でも他のやり方もあるぞ、というのがあったら教えて下さい。勉強の題材にさせていただきます。

#!/usr/bin/perl
use strict;
use warnings;
open my $a, '<', 'a.txt' or die;
open my $b, '<', 'b.txt' or die;
my %ids = map { $_ => 1 } map { (split /,/)[0] } <$b>;
while (<$a>) {
my $id = (split /,/)[0];
print if $ids{$id};
}
716デフォルトの名無しさん:2007/05/04(金) 04:45:07
>>715
$aと$bはmyの対象外の特殊な変数だからサンプルコードだとしても変数として使うのは止めたほうが良い。
717デフォルトの名無しさん:2007/05/24(木) 22:34:27

maildrop によって転送されたメールが画像添付ファイルだった場合に、添付画像だけを除去してくれる perl/php スクリプト

...ってスグに書けますスか?
718デフォルトの名無しさん:2007/05/27(日) 02:18:19
はい。
719デフォルトの名無しさん:2007/05/30(水) 00:45:44
>>718
くれくれで申し訳ないのですが、どうか作っては下さいませんでしょうか...?
720デフォルトの名無しさん:2007/06/05(火) 21:10:30
>>719
どのくらい払ってくれる?
721デフォルトの名無しさん:2007/06/06(水) 17:30:47
>>720
相場はいかほど?
722デフォルトの名無しさん:2007/06/06(水) 19:07:26
とりあえず工数の見積もりに1万5千円ほどいただきます。
723デフォルトの名無しさん:2007/06/07(木) 09:51:36
>>722
なんと...見積もりだけでそんなにかかるとわ。
もう少し安くならないの?
724デフォルトの名無しさん:2007/06/07(木) 16:06:52
今なら、なんと、お見積もりが、ご奉仕価格の 1 万 4999 円!
725デフォルトの名無しさん:2007/11/30(金) 23:14:49
このスレ、突然廃れたんだな。直前まで賑わってたみたいだが、自作自演でもやってたか?
726もつ ◆hS9D2mmxqU :2007/12/25(火) 11:20:24
保守?
727デフォルトの名無しさん:2008/01/10(木) 02:10:56
728デフォルトの名無しさん:2008/01/10(木) 10:30:50
Amazonのマーケットプレイス画面をgetしたいのですが、
http://www.amazon.co.jp/gp/seller-account/management/your-account.html
にPerlでアクセスすることが出来ません。
認証とかが必要なのでしょうか・・・・・・・。
729デフォルトの名無しさん:2008/01/10(木) 18:13:20
そりゃあ、自分のアカウントデータのやりとりは必要だろう
730anonymous:2008/01/26(土) 14:13:12
2chの特定のスレURLを任意で指定し、
すべての投稿から、「すでに投稿された文面が再度登場していたら、
その数だけレス番付きで抽出する」
というものはできないでしょうか。

要は何がやりたいのかと言うと、
「スレッドがコピペ投稿だらけ」になっており、
レス削除要請を行いたいのです。
ただ、そのコピペの数が尋常じゃないので抽出が困難なのです。
「文面の95%が一致していたらコピペとみなす」機構が嬉しいです。
731デフォルトの名無しさん:2008/01/26(土) 19:37:04
95%で、無関係の文章が巻き込まれたら嫌だなぁ。

って話はとりあえず置いといて、検索してたら
String::Trigram とかいうモジュールがヒットした。
この辺使えば作れるのかな?

あとはスパムフィルタ関連の資料か。
URLの有無で判定するタイプもあるらしいから
そういうタイプのフィルタは参考にはならないかも知れないけど。
732デフォルトの名無しさん:2008/01/26(土) 22:04:23
コピペ連投だと行頭の空白とかが混じることがあるから、
文字の先頭から末尾までが一致していたらアウト、という判定でいいんじゃね。
そういうの欲しいならRubyスレで頼むほうが早いかもよ。
733デフォルトの名無しさん:2008/01/30(水) 01:12:36
指定したファイル以外を消去する作って!
734デフォルトの名無しさん:2008/01/30(水) 02:21:14
>733
それだけじゃ何をどうすれば良いのか分からんな。
「カレントディレクトリ内にある指定したファイル以外を消去」だとすれば

perl -e"for (glob '*'){$_ eq $ARGV[0] or unlink $_}" ファイル名

で出来るが、サブディレクトリは多分掘らない。
735733:2008/01/30(水) 05:19:52
カレントディレクトリだけでOKです。
ありがとう 
今はこんな感じで改造しています。
いろいろしないといけないんですが
仮に指定したファイルがカレントディレクトリになかった場合とか
消去を確認するための方法とか ファイルを複数指定したりとか

perl のコマンドに詳しい本って
なにかありますかねー(ネットでも調べていますが)

#!/usr/bin/perl
print "指定ファイルは?";
$file = <STDIN>;
for (glob '*'){$_ eq $ARGV[0] or unlink $_} $file
736デフォルトの名無しさん:2008/01/30(水) 05:52:04
perl の関数一覧なら perlfunc ですぐ見れる
737デフォルトの名無しさん:2008/01/30(水) 05:56:58
>735
つーかマテ、その改造コード間違ってるんじゃねーか。
$file が全く関係ないところに書かれてる。

そのコードじゃカレントディレクトリ全部削除されるぞ。
$file = <STDIN>; と書くんだったら、
for (glob '*') { $_ eq $file or unlink $_ } にしなきゃ。

$ARGV[0] はコマンドラインからの引数な。
>734 はファイル名を引数として渡してる。
738733:2008/01/30(水) 08:29:20
>>737
あー ミスでしたか
コマンドとか引数とか覚えないといけないところが
まだまだありますな
>>736
perlの関数 ありがとう  
 
739デフォルトの名無しさん:2008/03/25(火) 20:19:49
任意のフォルダに入ってるexeファイルを起動するスクリプトがほしいです。
740デフォルトの名無しさん:2008/03/26(水) 12:11:44
>739
その「任意のフォルダ」はコマンド引数で指定すれば良いのか?
「任意のフォルダ」に.exeファイルが複数入ってる場合はどうすれば良いんだ?
741デフォルトの名無しさん:2008/06/09(月) 15:23:34
ActivePerlで
(擬似)子プロセスにてある条件を満たすと(sleep5とかでもなんでもいい)、親プロセスのTKウィジェットに反映する(リストボックスに一行追加とか)するスクリプトください
742デフォルトの名無しさん:2008/06/17(火) 09:54:41
ttp://www.linkrr.com/
みたいな複数のURLアドレスを一気に開くことのできるスクリプトが欲しいです
743デフォルトの名無しさん:2008/10/11(土) 18:59:15
過疎ってるなー
DBD::CSV使って、
execsql.pl -noheader "SELECT T1.ROW1, T2.ROW3 FROM temp1.txt T1 temp2.txt T2
WHERE T1.ROW1 = T2.ROW2 AND T1.ROW2 = 'abc';" > result.txt
みたいに使えるスクリプト誰か作って。
744デフォルトの名無しさん:2008/10/11(土) 19:05:12
間違えた
col1 col2 か
SQL初心者な物で
745デフォルトの名無しさん:2008/10/11(土) 22:08:41
今日も perl でエロ画像収集!
明日も perl でエロ画像収集!
エロ画像収集言語 perl 万歳!
746デフォルトの名無しさん:2008/10/12(日) 13:49:53
>>743だけど、DBD::CSVにバグがあった
やってらんねー
結局できたけど
747デフォルトの名無しさん:2008/10/26(日) 08:58:18
ここでperlをPHPに変換とかしてくれる?
748デフォルトの名無しさん:2008/10/26(日) 12:55:13
ばっちこい!
749デフォルトの名無しさん:2008/10/26(日) 13:08:10
600行くらいあるんだけど・・・
750デフォルトの名無しさん:2008/10/26(日) 14:31:15
情報後出しするやつは面倒だからお断りします
751デフォルトの名無しさん:2008/10/29(水) 19:22:48
偶数行と奇数行を入れ替えるスクリプトをお願いします。

出力例)
$cat test.dat







スクリプト実行後
$cat test.dat






752デフォルトの名無しさん:2008/10/29(水) 21:16:39
perl -pe 'print scalar <>'
753デフォルトの名無しさん:2008/10/30(木) 07:17:55
my $old ;
while (<>){
if ( $.%2 != 0 ){ $old = $_ ; next ; }
print $_, $old ;
undef $old ;
}
if ( defined $old ){ print "odd\n", $old ; }
754デフォルトの名無しさん:2008/11/14(金) 20:58:20
list.txtファイルに検索をかけたいキーワードを記入し
そのリストのキーワードを元にgrepみたいな動作をするスクリプト

listファイルの中身
$cat list.txt
aho
baka
test

検索をかけたいファイル(test.txt)の中身
$cat test.txt
aho 1
baka 2
manuke 3
test 4

実行結果
$./grep.pl
aho 1
baka 2
test 4

よろしくお願いします。
755デフォルトの名無しさん:2008/11/14(金) 21:24:33
#!/usr/bin/perl
sub slurp {
    local ($/, @ARGV) = (wantarray ? $/ : undef, @_);
    return <ARGV>;
}
my $keyword_file = "list.txt";
my $target_file = "test.txt";
my @keywords = slurp($keyword_file);
my $regex = join "|", map { chomp; "\Q$_\E" } @keywords;
$regex = qr/$regex/;
open my $fh, "<", $target_file;
for my $line (<$fh>) {
    print $line if $line =~ $regex;
}
close $fh;
756デフォルトの名無しさん:2008/11/14(金) 22:00:26
>>755 クールで惚れた
757デフォルトの名無しさん:2008/11/15(土) 08:37:43
>>755
ありがとうございました!
758デフォルトの名無しさん:2008/11/15(土) 09:13:35
朝っぱらからコードゴルフ
% perl -lne ' print if $t{ ( split )[0] } ++' list.txt test.txt
ま、区切り文字が全角スペースだと動かんのだがね。全角スペースに拘るなら
% perl -lne ' print if $t{ (/^(\w+)/)[0] } ++' list.txt test.txt
759デフォルトの名無しさん:2008/11/16(日) 01:29:32
dmain.cpp
Note: including file: d:/projects/game/include\common.h
Note: including file: d:/projects/game/include\product.h
Note: including file: d:/projects/etc/psdk/include\WindowsX.h
Note: including file: d:/projects/etc/psdk/include\windows.h

こういうファイルを

dmain.obj: \
/cygdrive/d/projects/game/include/common.h \
/cygdrive/d/projects/game/include/product.h \
/cygdrive/d/projects/etc/psdk/include/WindowsX.h \
/cygdrive/d/projects/etc/psdk/include/windows.h \
dmain.cpp

こんな風にするスクリプトってどうやるの?
760デフォルトの名無しさん:2008/11/16(日) 14:36:30
759は汎用性が必要だから、ファイル名とかドライブレターとかも関係なく動かせるのをお願いします
761デフォルトの名無しさん:2008/11/16(日) 14:45:05
マルチしといて、動かなかったら注文付けんの?
win の人だったらワンライナーはシングルクォートの代りにダブルクォートにすれば良いよ。
762デフォルトの名無しさん:2008/11/29(土) 21:11:06
入力フォームに入力して送信を押したら
hogehoge.cgi?入力された言葉

というように表示してくれるスクリプトを作ってほしいのですが
どなたか作ってもらえませんか?
763デフォルトの名無しさん:2008/12/01(月) 13:11:03
print "Content-type: text/html nn";
print "hogehoge.cgi?入力された言葉";
764デフォルトの名無しさん:2008/12/01(月) 23:28:02
> Perlでリクに答えるスクリプトを作るスレ
リクといえば、大石 りく。赤穂藩家老大石内蔵助良雄の妻。
そろそろ討ち入りの時期です。
Perlでリクにどうやって応えられるのか、スレが立って足掛け4年。
そろそろ、リクを喜ばしてみれ。
765デフォルトの名無しさん:2008/12/02(火) 02:36:05
>>764
猛烈に面白くない
766デフォルトの名無しさん:2008/12/02(火) 19:00:24
椎名りくは引退したの?
767デフォルトの名無しさん:2008/12/14(日) 00:12:00
ほすほす
768デフォルトの名無しさん:2009/01/09(金) 01:04:58
保守がてら

いつまでたっても彼女ができないのですが、
バレンタインデーまでに(3次元の)彼女ができるスクリプトを作ってもらえませんか
769デフォルトの名無しさん:2009/01/09(金) 01:18:29
3次元とか言ってる時点でお前には彼女なんて出来ないw
770デフォルトの名無しさん:2009/01/13(火) 19:50:17
>>768
バカだな。バレンタインデーまでにじゃなくてさ
バレンタインデー当日にチョコと一緒に告白される方が絶対いいだろ
771デフォルトの名無しさん:2009/01/14(水) 01:17:26
>>768
じゃあそういう感じのスクリプトをお願いします!
できれば、彼女ができる日付を選べる感じで
772デフォルトの名無しさん:2009/01/14(水) 17:40:36
>>771
バレンタインデーと言っておいて日付を選べる感じとはいかこれに
773デフォルトの名無しさん:2009/01/15(木) 00:46:54
彼女ができる日が可変、
チョコがもらえるのは2月14日で固定
774デフォルトの名無しさん:2009/01/15(木) 00:48:19
備考:
俺が事前に彼女を作りたいのは、
「気合入れて作るから楽しみにしててね」といわれたいからだ
775デフォルトの名無しさん:2009/01/21(水) 13:09:37
1つのフォームに改行を使って複数の単語を書き、それを受け渡して単語毎に並べるようなのって可能でしょうか?
$word[$_]のようなのでそれぞれの単語を分けたいのですがなかなか出来ません。
ご教授頂けますと有り難いです。

以下のような感じです。

┌──────┐
│あいうえお │
│かきくけこ │(←textarea)
│さしすせそ │
└──────┘

 ↓受け渡し↓

あなたの記入した単語は
1つ目[あいうえお]
2つ目[かきくけこ]
3つ目[さしすせそ]
の3つです。

のような感じです。

どなたか宜しくお願い致します。
776デフォルトの名無しさん:2009/01/21(水) 13:18:17
>>775
改行でsplitしたら?改行コードに気を付けないといけないけど、それで問題ないと思う。
777デフォルトの名無しさん:2009/01/21(水) 13:51:07
>>776
ありがとうございます。
調べてみます。
778デフォルトの名無しさん:2009/01/21(水) 20:39:36
>>776
すみません、やっぱりもう少し詳しくお願い出来ませんでしょうか?
779775:2009/01/21(水) 22:18:12
現在このような感じです。

#変数[$word]を受け渡し
@text = split(/\n/, $word);

これを表示させたいのですが、どの様にしたら改行毎に一つずつ表示出来るのでしょうか?
そもそも上ので出来るのでしょうか?

すみませんが宜しくお願い致します。
780デフォルトの名無しさん:2009/01/21(水) 23:45:59
textarea っていうのは、html の textarea のことか?
だったら html の textarea の使い方を調べなさいよ。
html すら知らないで perl でwebプログラミングなんて無謀すぎる。
781775:2009/01/22(木) 00:32:14
textareaはわかります。

ですが、@textの改行された分だけ(例えば3回改行されていた場合)並べて表示させる方法がわかりません。

例えば
あいうえお
かきくけこ
さしすせそ
を入力したとしてそれを一つずつ表示させるためにはどうしたら良いのでしょうか?

1行目
<textarea>あいうえお</textarea>
2行目
<textarea>かきくけこ</textarea>
3行目
<textarea>さしすせそ</textarea>

のように一つずつ分けて、書かれた行数分だけループさせて書きたいのですが、教えていただけないでしょうか?
説明不足で申し訳御座いませんが、宜しくお願い致します。
782デフォルトの名無しさん:2009/01/22(木) 16:34:45
for 文か foreach 文をつかえ。

for ($i = 0; $i < $#text; $i++) {
  print "<textarea>$text[$i]</textarea>";
}

foreach $tt (@text) {
  print "<textarea>$tt</textarea>";
}

まず http://www.tohoho-web.com/wwwperl2.htm ここでも読んで
perl で使える命令を全部、頭に叩き込んでおけよ。
783デフォルトの名無しさん:2009/01/22(木) 16:37:56
おっと...

誤: for ($i = 0; $i < $#text; $i++) ・・・
正: for ($i = 0; $i <= $#text; $i++) ・・・
784デフォルトの名無しさん:2009/01/22(木) 17:02:14
>>781
初めに思ってたのと何か違う質問になってるな
<textarea
ああいうえお
かきくけこ
さしすせそ</textarea>
これを1行ずつ表示させたいのではなくて?

use CGI;
my $q = CGI->new;
print $q->header( -type => "text/html");
my $body = $q->param( 'body' );
$body =~ s/\x0D\x0A|\x0D|\x0A/\n/g;
my $li;
for my $word (split "\n", $body) {
  $li .= "<li>$word</li>";
}
print <<"HTML"
<form method="post" action="">
<textarea name="body">
a</textarea>
<input type="submit" />

$li</form>
HTML
785775:2009/01/22(木) 18:05:17
>>782-783
ありがとうございます。
URL先と書いていただいた内容を参考にさせていただき、勉強致します。
>>784
ありがとうございます。
自分でも書いていて変だということに今気づきました。
簡単に纏めると、
@フォームに文章を書いてもらい、受け渡す
Aそれを受け取り、改行毎に一つずつ変数を持たせて並べる
みたいな感じです。
今も書いていて意味がわかりずらいです。
本当にすみませんでした。
786775:2009/01/22(木) 23:39:14
どうしても出来ませんでした…
どうやっても500エラーから逃れられません…

>>782-783様や>>784様のを組み込もうと考えていたのですが、何か根本的に私のは間違っていたみたいです。

申し訳御座いませんが、出来れば一通りのサンプルのようなものを作成していただけないでしょうか?

仕様は何度か書かせていただきましたが、
@test.cgi(仮)にアクセスするとフォーム表示
Aフォームに
[あいうえお]
[かきくけこ]
[さしすせそ]
等を複数行記入してsubmitを押す
Bsubmitを押すと
◆1行目
あいうえお です。
◆2行目
かきくけこ です。
◆3行目
さしすせそ です。
のように表示される。

このようなのをお願いしたいのですが、やはり難しいでしょうか?

どなたか何卒宜しくお願い致します。
787デフォルトの名無しさん:2009/01/23(金) 15:09:16
>>786
500エラーのエラー内容ください。
788775:2009/01/23(金) 15:27:16
@textらへんでエラーが出てるようですが、
明らかに自分が書いた部分が掛かっていると思われますので、
修正というよりは1から作り直したいのですが、お手伝いしていただけますでしょうか?
789デフォルトの名無しさん:2009/01/23(金) 15:28:54
>>788
エラーログが見れない環境?
>>784コピペするとどうなる?
790デフォルトの名無しさん:2009/01/23(金) 15:42:16
すでに >>784 で答えが出てるじゃないか。
何が不満なのか?
スクリプトをホームページへ設置するやりかたまで
手取り足取り教えろとでも言うのか?
791775:2009/01/23(金) 18:07:42
>>789
すみません、エラーログは見れません。
>>784をコピペして使うと500が出ます。
792デフォルトの名無しさん:2009/01/23(金) 18:31:21
じゃ、「http 500」でググれ
793775:2009/01/23(金) 21:07:22
フリーのPerlチェッカーでチェックしました。

Perlのエラー出力
Unrecognized character \241 at tmp.pl line 8.


ソース
0001: use CGI;
0002: my $q = CGI->new;
0003: print $q->header( -type => "text/html");
0004: my $body = $q->param( 'body' );
0005: $body =~ s/\x0D\x0A|\x0D|\x0A/\n/g;
0006: my $li;
0007: for my $word (split "\n", $body) {
0008:   $li .= "<li>$word</li>";
0009: }
0010: print <<"HTML"
0011: <form method="post" action="">
0012: <textarea name="body">
0013: a</textarea>
0014: <input type="submit" />
0015: $li</form>
0016: HTML

8行目の何が問題なのでしょうか?
794デフォルトの名無しさん:2009/01/23(金) 22:43:07
まさか、インデント用の全角スペースをそのままコピペしてた、
というオチではないだろうな。
795775:2009/01/23(金) 22:59:08
いえ、削除致しました。
796775:2009/01/23(金) 23:04:46
print <<"HTML"
でエラーが出ました。
797デフォルトの名無しさん:2009/01/24(土) 00:05:34
Unrecognized character \241 at tmp.pl line 8. って出てるじゃないか。読めないの?
798デフォルトの名無しさん:2009/01/24(土) 00:08:32
>>796
これだろ?
Can't find string terminator "HTML" anywhere before EOF at m.pl line 10.
799775:2009/01/24(土) 00:25:31
>>798
はいそれです。
800デフォルトの名無しさん:2009/01/24(土) 05:21:38
最後に改行を入れてないためのエラーか。
というか、>>793は全角スペースのエラーだよね。>>794は言ってることあってたと思うんだけど会話になってないな。
801775:2009/01/24(土) 06:00:43
>>800
確かにそうでした。
全角削除しても500出てたので勘違いしていました。すみませんでした。

最後に改行を入れた所、チェッカーでのエラーは無くなりましたが、未だにアクセスすると500になります。
何か原因などあるのでしょうか?
802デフォルトの名無しさん:2009/01/24(土) 08:04:02
シェバング行がねーよwwwアホスwww

ここまで書かないとだめか?
803デフォルトの名無しさん:2009/01/24(土) 08:37:46
これはひどい。

とにかく、ひどい
804775:2009/01/24(土) 10:24:36
すみません、理解出来ませんでしたので御説明いただけると有り難いです。
805デフォルトの名無しさん:2009/01/24(土) 11:03:48
シェルやCGIなどのインターフェイスを介してスクリプトを実行させる際に、
スクリプトの一行目に、どのプログラムで解釈させるのかを書いておく。
その行をシェバング(sharp bang/shell bang)行と呼ぶ。
その行が欠落している。

詳しくは、お使いのサーバの管理者にお尋ねください。
806デフォルトの名無しさん:2009/01/24(土) 11:40:03
コメニケーション能力不足
807デフォルトの名無しさん:2009/01/24(土) 11:40:40
会話のキャッチボールができていない
808デフォルトの名無しさん:2009/01/24(土) 12:19:41
ここまでくるとスレタイ通り全部作った方がいいのかな?不毛なやりとりだからもう下のやつコピーして終了にすればいいよ
ファイル名はtext.cgi。実行権限を付ける。
=====ここからコピー=====
#!/usr/bin/perl -T

use strict;;
use warnings;

use CGI;

my $q = CGI->new;
print $q->header( -type => "text/html");
my $body = $q->param( 'body' );
$body =~ s/\x0D\x0A|\x0D|\x0A/\n/g;
my $li;
for my $word (split "\n", $body) {
$li .= "<li>$word</li>";
}
print <<"HTML"
<form method="post" action="">
<textarea name="body">
</textarea>
<input type="submit" />

$li</form>
HTML

__END__
=====ここまでコピー=====
809デフォルトの名無しさん:2009/01/24(土) 12:26:39
>>806-807
つーか、クレクレだしな。
810775:2009/01/24(土) 12:31:09
>>805
説明ありがとうございます。
そのような事すら知りませんでした。
勉強になります。
ありがとうございました。
>>806>>807
申し訳御座いませんでした。
リアルで話し下手なのがこのような場でも御迷惑をおかけしたことを大変恥じております。
これからはperl以前にそのような事にも気をつけたいと思います。
本当に申し訳御座いませんでした。
>>808
最後までご丁寧にありがとうございます。
コピーして使わせていただきます。
本当にありがとうございました。

このスレに来るのはこれで最後にします。
御迷惑ばかりおかけして本当に申し訳御座いませんでした。
811デフォルトの名無しさん:2009/01/24(土) 12:46:06
結局改行の話以前のやり取りになったなw
812デフォルトの名無しさん:2009/01/25(日) 14:23:19
バレンタインというものを人々の記憶から消し去るスクリプトを作ってください
813デフォルトの名無しさん:2009/01/25(日) 15:34:59
>>812を葬れるスクリプトお願いします
814デフォルトの名無しさん:2009/01/25(日) 15:56:54
>>813の呪いを消し去るスクリプトを作ってください
815デフォルトの名無しさん:2009/01/25(日) 22:22:02
$str = "人々の記憶";
$str =~ s/バレンタインというもの//g;
816デフォルトの名無しさん:2009/01/26(月) 02:52:28
なんというシンプルさ
817デフォルトの名無しさん:2009/01/27(火) 14:39:23
>>813って殺人依頼じゃね?
818デフォルトの名無しさん:2009/01/30(金) 10:24:51
アゲ

ナイ
819デフォルトの名無しさん:2009/01/30(金) 21:01:09
>>817

うむ、だが不能犯だな。
820デフォルトの名無しさん:2009/02/01(日) 13:37:25
無能犯
821デフォルトの名無しさん:2009/02/02(月) 01:40:10
まあ、ギリギリアウトだな
822デフォルトの名無しさん:2009/02/04(水) 22:36:00
・スクリプト
マイリンク
・用途
リンクスクリプトで個人個人が好きなサイトをマイリンクに登録し、登録すると登録したサイトをマイリンクで確認出来る
・仕様
@個体識別情報(携帯端末は個体識別番号、パソコンはIPアドレス)で判断し、それぞれの端末毎にマイリンクを表示させる
Aマイリンクページでマイリンクしたサイトの削除が可能(個人個人で)
B追加はリンク表示の横の[追加]リンクを押すことで追加
Cマイリンクページでのマイリンクの表示数は10件程度で、超えた場合は次のページに表示

こんな感じのをお願い出来ませんでしょうか?
使っているリンク集スクリプトはKENT WEBさんのコスモナビです。

どなたか宜しくお願いします。
823デフォルトの名無しさん:2009/02/04(水) 23:31:00
既存のSBMの何が不満なんだ
824822:2009/02/07(土) 11:32:30
>>823
自分が今サーバーに設置して使っているリンク集に、ユーザーが使えるマイリンク機能を追加したいのです。
3000サイトくらい登録しているので、利用者からマイリンク的なものを使えるようにしてくれと要望がありましたので此処にお願いに参りました。

822に追加でマイリンクページでカテゴリ分け(カテゴリ作成、編集、削除)出来たら最高です。

どなたか何卒、宜しくお願い致します。
825デフォルトの名無しさん:2009/02/08(日) 17:38:53
お願いしますage
826デフォルトの名無しさん:2009/02/10(火) 17:48:33
DOSのバッチをPerlに書き換えてくれたりする?
827デフォルトの名無しさん:2009/02/10(火) 18:10:37
そんなの簡単。system 関数使えばいいじゃん。
828デフォルトの名無しさん:2009/02/13(金) 19:51:28
1,2,3の数字を組み合わせて25桁の数字をだーーっと表示するスクリプトを何卒お願いします。
829デフォルトの名無しさん:2009/02/13(金) 20:43:55
sub f {
my ($s, $d) = @_;
if ($d == 25) {
print $s, "\n";
}
else {
f($s.1, $d+1);
f($s.2, $d+1);
f($s.3, $d+1);
}
}

f('', 0);
830デフォルトの名無しさん:2009/02/13(金) 23:04:58
>>829
ありがとうありがとうありがとう!
831デフォルトの名無しさん:2009/02/15(日) 00:43:27
現在そのスクリプトにアクセスしている人数を表示出来るスクリプトお願いします。

よくある[○人オンライン中]的なやつです。
時間は60秒くらいまでをオンライン中扱いにして、携帯電話も正確にカウントされるようにお願いします!
832デフォルトの名無しさん:2009/02/15(日) 03:51:35
#mes = "自分以外誰もアクセスしてなくて悲しい思いすることになるからやめとけ";
833デフォルトの名無しさん:2009/02/15(日) 06:10:14
www
834デフォルトの名無しさん:2009/02/15(日) 06:52:16
訪問者多いから書いてんだろ多分

ちなみに俺のサイトなんて月10人くるかわからない程だぜ
835デフォルトの名無しさん:2009/02/15(日) 07:18:58
しかもそれが検索エンジンのボットだったりするんだな
836デフォルトの名無しさん:2009/02/16(月) 18:36:46
切実に>>822をお願いします。
リンクの保存はリンクIDで行うようにしていただけると助かります。
837デフォルトの名無しさん:2009/02/17(火) 16:46:43
〉〉GBE
この中にあると思うから好きなのを選べ
http://www.google.co.jp/search?hl=ja&q=%E3%81%91%E3%82%93%E3%81%A8%E3%81%86%E3%81%87%E3%81%B6&lr=
838デフォルトの名無しさん:2009/02/17(火) 17:12:31
>>837
残念ながらありませんでした。
839831:2009/02/22(日) 15:39:29
お願いします
840デフォルトの名無しさん:2009/02/25(水) 23:47:12
あげ
841デフォルトの名無しさん:2009/03/27(金) 18:34:39
@list = ('START', 'a123', 'a456', 'END', 'START', 'b123', 'b456', 'END');
foreach (@list) {
 if ($_ eq START) {
}
}
842デフォルトの名無しさん:2009/03/27(金) 18:45:57
C言語の関数だけがズラズラと書かれているファイルを読ませると、
関数名でソートして出力するスクリプトを作ってください。
例:
bool test() {
 return 1;
}

int main() {
 { コメント }
 return 0;
}

結果:
int main() {
 { コメント }
 return 0;
}

bool test() {
 return 1;
}

よろしくお願いします。
843デフォルトの名無しさん:2009/03/30(月) 08:11:51
c のソースを hoge.c として、
以下のスクリプトを hoge.pl として保存
perl hoge.pl hoge.c
====
my %hash ;
my $name ;
while (<>){
 if ( /^\S+\s+(\S+)\s*[(].*?{/ ){ $name = $1 ;}
 $hash{$name} .= $_ ;
}
printf "%s\n", $hash{$_} for sort keys %hash ;
# インデントは全角空白なので、注意。
====
後は自分で工夫して下さい。
844デフォルトの名無しさん:2009/03/30(月) 12:03:19
全然要求を満たしていなくてワロタw
845デフォルトの名無しさん:2009/03/30(月) 12:18:04
Cの関数の切り分けというのは、コメント行の処理など考えると、
自分でプリプロセッサつくるぐらい面倒くさいだろうな。

846るん(pafe) ◆mB5uKa4bvY :2009/04/02(木) 01:35:18
タイムアウト処理に関する質問です。
このページを参考にしますと
http://www.futomi.com/lecture/signal/alrm.html
の最初のスクリプト例

$SIG{ALRM} = \&timeout; # ALRM シグナルをキャッチした場合の処理を定義
alarm 10; # タイマーを 10 秒にセット
・・・
・・・
#タイマーで時間を監視したい処理
・・・
・・・
alarm 0; # タイマーをキャンセル

sub timeout {
#タイムアウトした際に実行する処理
}

上記例において、
#タイマーで時間を監視したい処理
sleep(100);
#タイムアウトした際に実行する処理
print 'timeout';

とすると、タイムアウトが一旦発生するとタイマー監視していた処理(sleep)の途中で「timeout」が一回表示されてプログラムが終わってしまうわけですが、
終わらせずに監視を続け、10秒おきにシグナルが発生するようにしたいのですがどうすればいいのでしょうか?
つまりsleep100秒している間に、timeoutという文字を10秒おきに一回ずつ計10個printするようにしたいのですが。
そういうスクリプトを作って見せてもらえないでしょうか。
847デフォルトの名無しさん:2009/04/02(木) 02:06:30
sleep(100);



system "sleep 100";

にしなさい
848るん(pafe) ◆mB5uKa4bvY :2009/04/02(木) 05:14:44
>>847
だめでした。やっぱりtimeoutの文字は一発で終わりです。sleepは確かに100秒続くのですが。

ちなみにsystem関数で置き換えられない処理を監視する場合も可能なようにスクリプト例をお願いします。
849デフォルトの名無しさん:2009/04/02(木) 06:11:52
>>846
sub timeout の中に
$SIG{ALRM} = \&timeout; # ALRM シグナルをキャッチした場合の処理を定義
alarm 10; # タイマーを 10 秒にセット
の部分をもう1回書いたらあかんの?
850るん(pafe) ◆mB5uKa4bvY :2009/04/02(木) 15:25:20
>>849

$SIG{ALRM} = \&timeout; # ALRM シグナルをキャッチした場合の処理を定義
alarm 1; # タイマーを 1 秒にセット
#タイマーで時間を監視したい処理
system "sleep 10";
alarm 0; # タイマーをキャンセル

sub timeout {
#タイムアウトした際に実行する処理
print 'timeout';
alarm 1; # タイマーを 1 秒にセット
}

こうもしてみたけどやっぱりダメでした。やはりtimeoutは一発出ただけですたい。
851デフォルトの名無しさん:2009/04/02(木) 16:03:29
$SIG{ALRM} = \&timeout;
alarm 1;
sleep 10;
alarm 0;

sub timeout {
print "timeout\n";
$SIG{ALRM} = \&timeout;
alarm 1;
}
852デフォルトの名無しさん:2009/04/02(木) 16:39:59
ブログではなく、自身のホームページにコメント欄を設置したいのですが、
コメントを送信したら自動的にhtmlに上書きされてページがリロードされるような
プログラムはどのように書けば良いですか?

考え方を教えていただければ自分で勉強しながら作ってみようと思いますので
どうかよろしくお願いします。
853デフォルトの名無しさん:2009/04/02(木) 16:42:04
スレ間違えました。別のスレで質問しますので、取り下げます。
854るん(pafe) ◆mB5uKa4bvY :2009/04/02(木) 18:35:31
>>847
>>849
>>851
すみませんでした!!
どうしようもないボケミスをしてたようです。
subルーチンの中にそのまま

sub timeout {
#タイムアウトした際に実行する処理
}

を書き込んでいたため、どうやっても一回しか出なかったようです。
凡ミスで失礼しました。
確かに10発出ます。
こんな間違いしててもperlは走るところが恐ろしいね(^^;
一緒に考えてくれてありがとう! ミスが見つかったので助かりました。
855デフォルトの名無しさん:2009/04/02(木) 19:12:36
ファイルロックのやり方調べたら結構いろんな例があるんですけど、どんなのが1番ファイルが壊れにくいですか?
自分はこんなの使ってるってのでもいいんで、教えてください。
856デフォルトの名無しさん:2009/04/02(木) 20:01:05
>>855
【Perl】ファイルロック(排他処理)について語ろう
http://pc11.2ch.net/test/read.cgi/php/1024795138/
857デフォルトの名無しさん:2009/06/07(日) 03:43:11
gmailの迷惑メールフォルダからヘッダ+本文を取ってきて、
例えばyahooから送られてきてるものをyahooに通報し、
通報できなかったものはログに落とすスクリプトをお願いします
858デフォルトの名無しさん:2009/06/09(火) 00:45:32
>>857
yahooの通報ってのがどういう処理なのかわかんね。modifiedとか見るべきかなと思ったけどとりあえず。
=====config.yaml
---
gmail:
user: username
pass: password
=====本体
use LWP::UserAgent;
use XML::Atom::Feed;
use YAML::XS;
my $yaml = YAML::XS::LoadFile('config.yaml');
my $gmail_auth = $yaml->{gmail};
warn YAML::XS::Dump $gmail_auth;
my $url = "https://mail.google.com/mail/feed/atom/spam";
my $ua = LWP::UserAgent->new;
$ua->credentials("mail.google.com:443", "New mail feed", $gmail_auth->{user}, $gmail_auth->{pass});
my $res = $ua->get($url);
my $content = $res->content;
warn $content;
my $atom = XML::Atom::Feed->new(\$content);
my @yahoo_addresses;
for my $entry ($atom->entries) {
  for my $author ($entry->author) {
    my $email = $author->email;
    push @yahoo_addresses, $1 if $email =~ m{ (^.+\@yahoo\.(?:co\.jp|com)$) }xms;
  }
}
for my $yahoo_address (@yahoo_addresses) {
  warn $yahoo_address if ! report($yahoo_address); # 通報できなかったら
}
859デフォルトの名無しさん:2009/06/09(火) 23:44:49
2ちゃんのIDってIPの下3桁と日付で生成されていると聞きました。
なので、IDからIPは不可能でも、
IDから次の日のIDを作成することは可能ではないでしょうか?
思いついて検索してみても引っかからないので、まだ誰も作ったことがないのかも?
pelr勉強中で、まだ組めない(少し読める程度)ので、ご教授願います。
860デフォルトの名無しさん:2009/06/10(水) 00:33:08
>IDから次の日のIDを作成することは可能ではないでしょうか?
なぜそう思う?

>IPの下3桁と日付で生成されている
ということはだな、IPの下3桁と次の日の日付がわからないと無理だろ?
861デフォルトの名無しさん:2009/06/10(水) 01:15:28
>>860
IPは変わってないという前提で、
日付とIDを入れれば算出できるのではないかと…。
862デフォルトの名無しさん:2009/06/10(水) 06:32:30

あほ?
863デフォルトの名無しさん:2009/06/10(水) 06:34:39
ごはんにカレーをかけて食ったらウンコが出る。
ということは、ごはんにウンコかけて食えばカレーを作ることも出来る!
864デフォルトの名無しさん:2009/06/10(水) 08:53:55
>>860
何が言いたいのかわからないけど、>>859の言ってるアルゴリズムが正しければ可能だろ
IPの下3桁って254個しかないんだからIDを254個作ればどのIPかわかる。
で、そのIPと次の日を使ってID作ればいいだけでしょ。
865デフォルトの名無しさん:2009/06/10(水) 10:12:13
↓こっちでやって

暗号数学について語ろう。ROUND 4
http://science6.2ch.net/test/read.cgi/math/1243318266/
866デフォルトの名無しさん:2009/06/10(水) 11:24:37
なんでそんな過疎った場所に…。
てかID逆変換 でぐぐるとIDからIP算出してるプログラムが出てくるが、
あれじゃあかんのかい。
867デフォルトの名無しさん:2009/06/11(木) 11:01:36
>>861
不可逆的な演算でIP+日付→IDと作っているなら難しいんじゃないのか?
ひろゆきが「秘密の演算」を途中に挟み込んでいる可能性もあるし。
868デフォルトの名無しさん:2009/06/11(木) 11:46:40
>>866
そこ2001年だからかしらんが、listが古くてダメだった。
ttp://saki.2ch.net/entrance/kako/998/998295821.html

ttp://blue.ribbon.to/~testsan/
ここにリスト作成プログラムと、それを検索するperlプログラムがあるが、
確かにIDリストから検索するだけなら簡単だが、
今やってみたけども、IDリストに無いIDが多い。ゆえにIPは出ない。
これでIPが(下3桁だけでも)出せれば、次の日の書き込みのIDが分からなくても、
同じ人の書き込みを追尾するのはできなくはないな(完璧とはいわんけど)。
869デフォルトの名無しさん:2009/06/11(木) 11:47:46
>>867
それを考えるのが楽しいんじゃないかww
870デフォルトの名無しさん:2009/06/11(木) 12:44:17
>>867
「秘密の演算」にMD5使われてたら確実に無理だな
871デフォルトの名無しさん:2009/06/11(木) 12:58:40
2000年頃のは確か/dev/urandomとMD5を使ってた。
サーバごとにID値が変わるのは、urandomの値に左右されるため。
最新のはシラネ。
872デフォルトの名無しさん:2009/06/12(金) 08:13:59
あぁ、それ俺も見たことあるなぁ。確かにMD5だった
ID逆変換はネタアプリだし
873デフォルトの名無しさん:2009/06/12(金) 08:16:35
あ、過去にはマジで逆変換するのもあったのかw
874デフォルトの名無しさん:2009/06/13(土) 06:01:55
以下の動作をするスクリプトのプログラミングをよろしくお願いします。

個人のデータ(苗字、名前、性別、住所、部署等)が載ったテキストを処理し、
特定の苗字で、性別が男の場合はその人のデータをすべて削除し、
それ以外はすべて出力するというスクリプトが欲しいです。
例えば、
鈴木 一郎 男 東京都大田区〜、営業部
鈴木 花子 女 千葉県浦安市〜、総務部
といったデータが存在した場合、鈴木花子はテキストに残るが、
鈴木一郎に関する全データは削除される、という処理です。
他の苗字の人のデータは性別関係なくすべて出力されますが、鈴木という苗字で男性のデータはすべて削除します。

使用環境はUNIXです。よろしくお願いします。
875デフォルトの名無しさん:2009/06/13(土) 06:52:34
>>874
まあ何つうか、データの形式とかが重要だったり、
あと出力をどのような形式でするのかということに依存するんじゃないかな
固定長なのか区切り文字データなのかでも違うし

出力、入力ファイルハンドルが存在すると仮定して、出力はこんな感じだろ
while(<$IN>){
    next if (/\A鈴木/&&/\s女\s/);
    print $out $_;
}

(女、一文字の姓、名が存在しないと仮定して)
876デフォルトの名無しさん:2009/06/13(土) 12:39:32
>>875
花子がリストラされてしまいます
877デフォルトの名無しさん:2009/06/13(土) 17:10:21
素直に書けよ
鈴木 かつ 男
以外を出力

while(<>){
next if (/鈴木/ and /男/)
print
}
878デフォルトの名無しさん:2009/06/13(土) 18:56:33
鈴木 花子 女 秋田県男鹿市〜
とかきたらダメだね。カラムが空白で区切られれてるんだったら、splitしたほうが安全かと
879デフォルトの名無しさん:2009/06/13(土) 19:20:44
874です
皆様、ありがとうございます。

>>878
たしかに他の情報に男が含まれていたら、それも削除されてしまいますね。。。
カラムは空白で区切られています。splitを使う場合はどうすれば良いのでしょうか?
880デフォルトの名無しさん:2009/06/13(土) 21:32:51
while(<>){
@fields = split(' ');
next if ($fields[0]=~/鈴木/ && $fields[2]=~/男/);
join(' ',@fields);
print;
}
881デフォルトの名無しさん:2009/06/13(土) 21:37:44
874ですが、重要な事を忘れていました。
個人のデータ以外にも、これは何々のテキストです等のデータが載っているのですが、
これらもそのまま出力されるようにしたいです。
申し訳ありませんでした。
882デフォルトの名無しさん:2009/06/13(土) 21:58:46
>>877は単に論理構造を示しただけ
データ構造がどうなってるか質問者がいわねーんだもん

while(<>){
next if (/^鈴木/ and /\s男\s/)
print
}

こんなんでいいだろ
細かい点は自分の好きに調整されたし
883デフォルトの名無しさん:2009/06/16(火) 23:46:53
mkdirでディレクトリを一斉に作る事が可能なスクリプトを作ってください。お願いします。
仕様は外部のテキストファイルを読み込み、そこに書いてある名前のディレクトリをmkdirで作ります。
例えば、以下のような外部テキストが存在した場合、mkdir eva01, mkdir eva02というコマンドを
Perlが自動的にやってくれて、スクリプトを実行させた後に確認するとeva01〜eva99のディレクトリが
できている、といった状態です。
分かりにくいですがよろしくお願いします。環境はUNIXです。

外部テキストファイルの中身

eva01
eva02
eva03
(略)
eva99
884デフォルトの名無しさん:2009/06/17(水) 00:42:39
だるっ

open LIST, "dirlist.txt";
map {mkdir $_} <LIST>;
885デフォルトの名無しさん:2009/06/17(水) 00:51:44
use IO::File;
use File::Path;

my $fh = new IO::File("$ARGV[0]") or die $!;
mkpath $_ while <$fh>;
886デフォルトの名無しさん:2009/06/18(木) 03:27:00
誘導されてきました。
大量の画像ファイル(5〜10万枚)を、指定した特定のディレクトリに
自動的に分配されるプログラムのスクリプトが欲しいのですが、
お願いできないでしょうか?
以下のようなこのファイルはこのディレクトリに入れるという別のテキストが存在します。

--画像とディレクトリマッチング--

toyotaca01.jpg TOYOTA_01
toyotaca02.jpg TOYOTA_01
toyotaca03.jpg TOYOTA_01
hondaciv01a.jpg HONDA_CIV01
hondaciv01b.jpg HONDA_CIV01
hondaciv01c.jpg HONDA_CIV01
hondaciv02.jpg HONDA_CIV02
以下、ずっと続く

左がファイル名で右がディレクトリ名です。
よろしくお願いします。
887デフォルトの名無しさん:2009/06/18(木) 04:17:33
use strict;

open IN, "list.txt";
while(<IN>){
chomp;
my($f, $d) = split / /, $_, 2;
die "File exists: $d/$f\n" if -e "$d/$f";
rename($f, "$d/$f") or die "Error: rename($f, \"$d/$f\")\n";
}
888デフォルトの名無しさん:2009/06/19(金) 00:34:02
>>886
情報が少ないな
・そのディレクトリは既に作ってるのか?
・今現在画像ファイルと同じ階層にディレクトリ作るの?
889デフォルトの名無しさん:2009/06/19(金) 00:37:48
>>888
ディレクトリは作ってます。
画像ファイルは別のディレクトリにあります。
890デフォルトの名無しさん:2009/06/19(金) 00:58:26
それは大問題だな
>>887じゃ役に立たん
891デフォルトの名無しさん:2009/06/22(月) 04:15:19
>>880
レスが遅れて申し訳ありません。
画像と画像を入れるディレクトリを同じ階層に持ってきました。
これなら大丈夫なのでしょうか?
892デフォルトの名無しさん:2009/07/14(火) 22:00:10
同じ情報のある二つのテキストファイルを結合させるスクリプトを作って頂きたいのですが、
よろしいでしょうか?例えば、以下のようなテキストファイル、1.txtと2.txtファイルがあった場合、
結合して、3.txtのように出力させるようにしたいのです。しかし、1.txtと2txtでは記載されている情報が違うので、
2.txtから1.txtに載っていない氏名の人は排除して、1.txtベースで結合して出力したいです。

1.txt
山田太郎 19681215 男 営業部
宮脇俊夫 19830527 男 総務部
前田恵子 19870715 女 総務部

2.txt
山田太郎 丸ノ内大学
宮脇俊夫 日比谷大学
吉中浩二 半蔵門高校
前田恵子 千代田大学
常盤光一 大江戸大学

3.txt
山田太郎 丸ノ内大学 19681215 男 営業部
宮脇俊夫 日比谷大学 19830527 男 総務部
前田恵子 千代田大学 19870715 女 総務部

よろしくお願いします。
893デフォルトの名無しさん:2009/07/15(水) 00:53:53
#!/usr/bin/perl
use strict;
use warnings;
use List::Util qw(first);

my ($txt1, $txt2, $txt3) = @ARGV;
open my $fh1, $txt1 or die $!;
my @data1 = map { chomp; my @c = split / /; $_ = \@c } <$fh1>;
close $fh1;
open my $fh2, $txt2 or die $!;
my @data2 = map { chomp; my @c = split / /; $_ = \@c } <$fh2>;
close $fh2;

open my $fh3, '>', $txt3 or die $!;
foreach my $d1 (@data1) {
if (my $e = first { $_->[0] eq $d1->[0] } @data2) {
printf $fh3 "%s %s %s %s %s\n", $d1->[0], $e->[1], $d1->[1], $d1->[2], $d1->[3]
}
}
close $fh3;
894デフォルトの名無しさん:2009/07/15(水) 22:53:45
>>893
ありがとうございます
895デフォルトの名無しさん:2009/07/18(土) 20:43:13
http://www1.axfc.net/uploader/Sc/so/18504

この掲示板CGIを完成させてくれませんか。
途中までがんばってみたのですが、ギブアップします。誰かお願い。
896デフォルトの名無しさん:2009/07/21(火) 04:12:48
>>895
全然何がしたいのか伝わってこない
元々配布されてる時点で完成品だったんじゃないのか?
どこを触ってどこまで進んだ?
そもそも何を完成させたいのか?

ということを書いてそういうスレに丸投げればいいと思うよ
897デフォルトの名無しさん:2009/08/10(月) 22:45:18
ppを使ってgtk2アプリをWindowsの実行ファイルにする方法を教えてください。
898デフォルトの名無しさん:2009/08/20(木) 15:52:09
ディレクトリ内に同一フォーマットですが、データ内容の異なるファイルが数千個あります。
そのファイルの8行目にある数値と、ファイル名を一括抽出して、1つのテキストファイルに出力をしたいです。
このようなスクリプトをお願いできないでしょうか?
例えば、ファイル名が uekibachi0589.datで、8行目にある数値が 780 だとしたら、
出力されたテキストファイルの中には、以下のように出力されます。

uekibachi0589.dat 780

どうかよろしくお願いします。
899デフォルトの名無しさん:2009/08/20(木) 16:17:36
$ perl -e 'foreach$f(glob("$ARGV[0]/*")){$i=0;open FH,$f;while(<FH>){if($i==7){$f=~s/^.+?([^\/]+)$/$1/;print"$f $_"}$i++}close}' [*.datのあるディレクトリ名]
900デフォルトの名無しさん:2009/08/20(木) 16:28:11
$ perl -e 'foreach$f(glob("$ARGV[0]/*")){$i=0;open FH,$f;while(<FH>){if($i==7){$f=~s/^.+?([^\/]+)$/$1/;print"$f $_"}$i++}close FH}' [*.datのあるディレクトリ名]
のまちがいorz
901デフォルトの名無しさん:2009/08/20(木) 18:34:02
foreach$f(glob"$ARGV[0]/*"){
    open$fh,$f;
    for($i=0;$l=<$fh>;$i++){
        if($i==$ARGV[1]){
            $f=~s/^.+?([^\/]+)$/$1/;
            print"$f $l";
        }
    }
    close$fh;
}
902デフォルトの名無しさん:2009/08/20(木) 21:17:23
おお、foreach と $f の間を空白をあけずにくっつけてもOKなのか。
はじめて知った。
しかし汚ったないコードだな。
903デフォルトの名無しさん:2009/08/20(木) 21:20:22
> おお、foreach と $f の間を空白をあけずにくっつけてもOKなのか。
> はじめて知った。

perlのインタプリタはめちゃくちゃなコードで
できるだけ解釈するポリシーがあるって
どこかで書いてあった気がする

> しかし汚ったないコードだな。

ワンライナーなら使い捨てだし
このくらいで十分でしょ。。
904デフォルトの名無しさん:2009/08/20(木) 21:20:38
>>902
キレイで優雅でエレガントなお手本コードを見せてくれ
905デフォルトの名無しさん:2009/08/20(木) 21:22:39
s/(めちゃくちゃなコードで)/$1も/
orz
906デフォルトの名無しさん:2009/08/20(木) 21:28:56
>>904
もしかしたら、
use strict;
use warnings;
my
あたりが使ってあって、
レイアウトとかインデントとかの体裁が整ってたら
きれいっていうことになるのかもしれない。

でも、この程度のことならワンライナーで済ませるよね。
もっとやることが増えてきたらそのとき考えるし、
ワンライナーでいちいちuse strictとかはしないよ。。
907デフォルトの名無しさん:2009/08/20(木) 21:34:11
ワンライナーって一行で書いたもんのこと言うとばっかり思ってた
908デフォルトの名無しさん:2009/08/20(木) 21:34:43
>>900は一行じゃないの?
909デフォルトの名無しさん:2009/08/20(木) 21:38:19
おお、>>901>>900の改行入れただけだったか
しかし読みにくいコードだな
910デフォルトの名無しさん:2009/08/20(木) 21:41:19
>>909
>>900を書いたときには>>901はあたまになくて、
{を書くときに{}とペアで書いたりすることはするけど
前から順に処理の過程を書いていくようにすれば
それほど書きにくくないと思うよ。
911デフォルトの名無しさん:2009/08/21(金) 03:48:02
>>904
ほらよ。簡単じゃん。これくらい書けないのかね、今どきの中学生は。
foreach $f (glob "$ARGV[0]/*") {
    open $fh, $f;
    for ($i = 0; $l = <$fh>; $i++) {
        if ($i == $ARGV[1]) {
            $f =~ s/^.+?([^\/]+)$/$1/;
            print "$f $l";
        }
    }
    close $fh;
}
912デフォルトの名無しさん:2009/08/21(金) 08:54:29
perl -ne 'BEGIN{ @t = @ARGV ; } print +( shift @t ) . $_ if $. == 8 ; $. = 0 if eof ' *txt
とかで良いんじゃ…
913デフォルトの名無しさん:2009/08/22(土) 00:16:40
アホだ
perl -ne ' print "$ARGV $_" if $. == 8; $. = 0 if eof ' *txt
に訂正
914デフォルトの名無しさん:2009/08/22(土) 12:11:44
@tmp = (1,2,3,4,5);

これをforeachみたいに一回のループで終わらせるんじゃなくて、
123451234512345
と無限ループでずっと表示させたい。
シンプルでうまい書き方お願いします。
915デフォルトの名無しさん:2009/08/22(土) 13:07:06
while 1
とか
for ( ; ; )
を使えばいいよ。
そんなのプログラミングの初歩の初歩。perl以前の問題。
916デフォルトの名無しさん:2009/08/22(土) 13:18:03
while(1){
foreach(@tmp){
print "$_";
}
}
は考えたんだけどループ2個が気に食わなくてね。でも妥当か。
917デフォルトの名無しさん:2009/08/22(土) 14:04:16
>>916

print @tmp while 1;

最近は学校で中カッコを多用するプログラミング言語しか教えてないのか、
変に中カッコに毒されて頭が固くなってるヤツばっかりだな
918デフォルトの名無しさん:2009/08/22(土) 14:05:48
中カッコの無い言語はプログラミング言語に非ず、って風潮だもんな
919デフォルトの名無しさん:2009/08/22(土) 14:30:17
えー、そうか?
頭固いんじゃねw
920デフォルトの名無しさん:2009/08/22(土) 17:06:24
Rubyを習えってこと?
921デフォルトの名無しさん:2009/08/23(日) 05:04:52
>>917
JIS Z 8201-1981 においても「小括弧」・「中括弧」・「大括弧」という名称は廃止され、
現在は「丸括弧」・「角括弧」・「波括弧」と表記されている。
922デフォルトの名無しさん:2009/08/23(日) 05:06:22
923デフォルトの名無しさん:2009/08/23(日) 05:08:00
924デフォルトの名無しさん:2009/08/23(日) 08:55:57
>>920
そりゃそうだろう。
今時、廃れたPerlとか変態しか使わんわ。
925デフォルトの名無しさん:2009/09/03(木) 00:54:14
2つのサーバにFTPでファイルを同じファイル置くんだけど、差分がないかを確認したい。

ある時間で起動ようにして2つのファイルの差分をとると、どうしても若干タイムラグができてしまって、
そのタイムラグの間にファイルを置かれると、もう比較しようがなくなってしまう。

そこで、起動時間より後におかれたファイルは除外したファイルリストを作成して、そのファイルリストの差分を確認するようにしたいです。

このようなプログラムはできますか?
926925:2009/09/03(木) 00:56:43
ひとつ言い忘れてましたが、古いタイムスタンプでファイルが置かれる可能性もあるので、
タイムスタンプは使えません。
927デフォルトの名無しさん:2009/09/03(木) 10:17:06
>>925
日本語がいまいちわからんな。
二つのディレクトリを比較するなら
一番確実なのはdiffを使うこと。
サーバが分かれてるなら、NFSをつかえばいい。

あるいはrsyncを使う。これならNFSは不要。

もっといいのはSubversion。

どうしてもPerlを使いたいなら<*>かreaddirを配列に代入すれば、
その瞬間のデイレクトリリストがとれる。

928デフォルトの名無しさん:2009/09/08(火) 01:51:59
ひとつのサブルーチンで、スカラ、リスト、ハッシュを渡すと
それぞれ別の挙動をとる関数は作れますか
929デフォルトの名無しさん:2009/09/08(火) 01:53:20
…すみません、質問スレは別にあるのですね
向こうへ行ってみます、スルーしてください
930デフォルトの名無しさん:2009/09/12(土) 01:43:26
少し知恵を貸して下さい。

get-flash-videos -Google Code
http://code.google.com/p/get-flash-videos/

数々の動画サイトからコマンドラインで動画を取得するツールなんですが、
動画のタイトルに日本語が含まれていると、ファイル名が文字化けしてしまうようです。

http://homepage2.nifty.com/ttoyoshima/Perl/Intro.htm
上記サイトやjcode.plも試したが上手く行かず…マイナーなツールなせいか改善策をググってもな無い…

環境はWindows VistaにActive Perl5.8.9.826です。
お助け頂ければ有難いです。
931デフォルトの名無しさん:2009/09/12(土) 05:56:56
>>930
WinXP / cmd.exe / ActivePerl 5.10.1 (build1006) でなら
次レスのパッチで一応通る。つか改造依頼はこっちだな。

【 スクリプト改造依頼スレ】(丸投げ) part7再々
http://pc11.2ch.net/test/read.cgi/php/1222645553/

★三 【 スクリプト改造工房 PART 9 】 ★三
http://pc11.2ch.net/test/read.cgi/php/1143834740/

金出すから改造してよvol.3
http://pc11.2ch.net/test/read.cgi/php/1162147035/
932デフォルトの名無しさん:2009/09/12(土) 05:57:38
 --- get_flash_videos-1.15.old Sat Sep 12 05:29:25 2009
 +++ get_flash_videos-1.15 Sat Sep 12 05:37:46 2009
 @@ -154,5 +154,5 @@
 
  $title =~ s/\s+/_/g;
 - $title =~ s/[^\w\-,()&]/_/g;
 + $title =~ tr!\\/:*?"<>|!_!;
  $title =~ s/^_+|_+$//g; # underscores at the start and end look bad
 
 @@ -160,5 +160,7 @@
  return get_video_filename($type) unless $title;
 
 - return "$title.$type";
 + $title = Encode::encode(utf8 => "$title.$type");
 + Encode::from_to($title, utf8 => 'cp932');
 + return $title;
  }
 
 @@ -3996,6 +3998,6 @@
  }
 
 -binmode STDERR, ":utf8";
 -binmode STDOUT, ":utf8";
 +binmode STDERR;
 +binmode STDOUT;
 
  my (@urls) = @ARGV;
933930:2009/09/14(月) 22:04:47
>>932 レスが遅くなって申し訳ない
出来たよ!!本当にありがとう。
凄く勉強になった。本当に感謝。
934デフォルトの名無しさん:2009/10/06(火) 23:24:49
すみません、今、ローカル上で.plを起動するとあるCGIにアクセスしてPOSTするツールを
作成していますが、そのCGIが発行するCookieを取得して、リクエストヘッダに含める必要があります。
どうやったら良いんでしょうか?↓今のコードの抜粋です
my $sendBuf=<<"EOM";
POST ${path} HTTP/1.1
  (略
Cookie: #取得したcookie
  (略
#リクエスト
EOM
print $sendBuf;
my $sock = &C2S($saddr) || return undef;
print $sock $sendBuf;
close($sock);
return 1;
}
sub C2S{
my @zz = @_;
my $CONT;
socket($CONT,PF_INET,SOCK_STREAM,0) || return undef;
my $xx = inet_aton($zz[0]) || return undef;
my $yy = pack_sockaddr_in($zz[1]?$zz[1]:80,$xx) || return undef;
connect($CONT,$yy) || return undef;
autoflush $CONT (1);
return $CONT;
}
935デフォルトの名無しさん:2009/10/07(水) 08:10:47
>>934
質問文読んだ後にコード見て、一瞬違う言語のスレだったかと思って混乱した
てっきりLWP::UserAgentとかの話かと思ったわ

> そのCGIが発行するCookieを取得して、リクエストヘッダに含める必要があります。
これどういうこと?すでにCookieの値をファイルか何かでもってるの?
それとも一度CGIにアクセスしてCookieを取得した後に、もう一回POSTしたいってこと?
936デフォルトの名無しさん:2009/10/07(水) 09:03:18
>>934
CGI.pmつかえば?


use CGI qw/:all/;

$cookie=cookie "中野美奈子";

print header(-cookie=>$cookie,-type=>'text/html');
937デフォルトの名無しさん:2009/10/07(水) 09:11:11
>>935
> > そのCGIが発行するCookieを取得して、リクエストヘッダに含める必要があります。
> これどういうこと?


ローカルスクリプト → リモートCGI(フォームあり、クッキー発行)へアクセス
ローカルスクリプト ← クッキー
ローカルスクリプト → クッキーを返しつつ、POST

自動書き込み完了


こんな感じ?
938935:2009/10/07(水) 11:06:12
>>937
それでいいなら単純なのだとこんな感じかな

use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Cookies;

my $url = 'http://www.google.co.jp';

my $ua = LWP::UserAgent->new;
$ua->cookie_jar(HTTP::Cookies->new);

$ua->get($url);
my $res = $ua->post($url => {
    a => 1,
    b => 2,
});

warn $res->request->as_string; # 送ったデータの確認


LWP::UserAgentのcookie_jarってメソッド使ってHTTP::Cookiesのオブジェクトをセットすれば
あとはLWP::UserAgentでGETやって、その後にPOSTするだけ
939デフォルトの名無しさん:2009/10/07(水) 16:45:37
皆さんありがとうございます!

>>936
これはどういう処理でしょうか…?

>>937
そういうことです!

>>938
おお!
とりあえずインスコしてみます
940デフォルトの名無しさん:2009/10/07(水) 17:06:28
>>939
>>936
> これはどういう処理でしょうか…?

処理の「なかみ」を誤解して書いたものです。

>>937
誤りかもしれないと思い直し、手順確認です。
941デフォルトの名無しさん:2009/10/26(月) 10:50:52
perlで作れるかわかりませんが、スクリプト作成お願い致します。
にこさんうどからmp3を取得するperlスクリプトを作成して頂きたいのです。
http://nicosound.anyap.info/

イメージ的には、
「get_nico_sound sm12345」「get_nico_sound nm54321」
などのコマンドを入力することによって
mp3がダウンロードされれば良いと考えております。

wgetでダウンロードを試みても上手くいかなかったので…
どなたかよろしくお願い致します。
942デフォルトの名無しさん:2009/10/26(月) 18:58:11
氏ね
943デフォルトの名無しさん:2009/11/24(火) 17:38:21
>>941
自分で作れカス
944デフォルトの名無しさん:2009/11/26(木) 02:02:02
ニコニコ静画から指定したジャンルの画像を自動で落としてくるプログラムお願いします。
945デフォルトの名無しさん:2009/11/26(木) 02:02:58
>>941
俺も頼みます!
946デフォルトの名無しさん:2009/11/27(金) 07:20:16
>>941 出来なくは無いけど面倒くさい
947デフォルトの名無しさん:2009/11/28(土) 03:22:17
とあるプログラムで出力データファイル名、取引先名、出荷商品数の合計を1つのテキストファイルに出力をするスクリプトをお願いします。
卸売りをする中小企業で働いている者で、かなり昔に作られたプログラムの出力データファイルが存在し、
出力されたデータファイルは1000ファイルほどあり、自社名略称 商品コード略称 拡張子というファイル名です。
例えば、自社名がJALだとしたら、jal110b.ors(拡張子orsとありますが、実際はただのtxtファイルです。)となります。
出力データファイルの中身は最初の10行くらいは商品の説明や仕入先、原価などが書いてあり、その下に出荷をした企業の詳細が書いてあり、

No 取引先名 価格 値引き 出荷商品数 日付 備考
1  NCA   700  100    40    001112 担当○○様
2  BKG 700  20     001113 担当XX様
3  AOK    700  100    32     001113 出荷予定日は00年11月13日だが、担当者不在なので11月15日に延期
4  NCA   700        10     001115 追加分

といった行列が存在します。他の担当者の方が、出力データファイル名と取引先名のみが書かれたリストを作成し、
そのリストを読み込んで、出力データファイル名、取引先名、出荷商品数の合計を1つのテキストファイルに出力するプログラムを
最初はPerlを少しかじったことのある私でも組めるだろうと思っていたのですが、
取引先によって、値引きが書いてあったり書いてなかったりするので、splitで分割をすると出荷商品数の列が合わなくなり困り果てています。
948947:2009/11/28(土) 03:23:33
こういうデータの入ったファイルから、出力データファイル名、取引先名、出荷商品数の合計を
以下の例のように1つのテキストファイルに出力するスクリプトを書いてはいただけないでしょうか?

このファイルを読み込み、(左から、出力データファイル名、取引先名)

110b NCA
110c KBA
110d NCA
       ... 下にまだ300行近くあります

以下を1テキストファイルに出力。(左から、とあるプログラムで出力データファイル名、取引先名、出荷商品数の合計)

jal110b.ors NCA 50
jal110c.ors KBA 79
jal110d.ors NCA 80

よろしくお願い致します。
949デフォルトの名無しさん:2009/11/28(土) 04:12:39
タブ区切りのファイルなの?
値引きがない場合はタブが連続して二つ付いてるとかならまだわかるけど、
説明の読んでもどうやって値引きが書いてないかを判別すれば良いのかわからんな。
他のフィールドは必ず書かれてるっていうのなら区切った後に配列の数が一つ少ないかどうかで判断できるけど。
950デフォルトの名無しさん:2009/11/28(土) 04:21:45
>>949
確認したところスペース区切りです。
出荷商品数を列にそって計算するといった方法はPerlではできないのでしょうか?
951デフォルトの名無しさん:2009/11/28(土) 04:42:41
>>950
出荷商品数までに何文字あるか分かればできると思う
40文字あるとした場合には、

foreach(@table){
/^.{40}[0-9]*?([0-9]+)/;
$count += $1;
}

それよりインプット側のファイル内の表の部分だけ抜き出すのをどうするかのほうが大事だと思うんだが
改行区切りされてても例えば企業の詳細なんかに改行使われてたら難しくなりそうな
952デフォルトの名無しさん:2009/11/28(土) 05:28:21
一度Ruby辺りを使って、取引先名と出荷商品数のみを全抽出したがいいかもね
953デフォルトの名無しさん:2009/11/28(土) 05:41:59
いやgrep検索でいけるだろ
954デフォルトの名無しさん:2009/11/28(土) 06:54:57
どっちにしても列があってないと厳しいな
確実じゃないが、splitで切るよりも文字数範囲指定で抽出がベストか
賢者求む
955デフォルトの名無しさん:2009/11/28(土) 08:12:36
#!/usr/bin/env perl
use strict ;
use warnings ;
sub get_sum {
my ($name, $sbj ) = @_ ;
my $sum = 0 ;
open my $fh, '<', $name . '.ors' or die ;
while (<$fh>){
next if ! /^\d+\s+$sbj\s+(?:\d+\s+){1,2}(\d+)\s+\d{6}/ ;
$sum += $1 ;
}
close $fh ;
return join "\t", $name, $sbj, $sum ;
}

while (<>){
printf "%s\n", get_sum split /\s/, $_ ;
}
956デフォルトの名無しさん:2009/11/28(土) 08:18:39
1. 上を適当な名前(get.pl)で保存。
2. perl get.pl DATABASE
 で実行。( DATABASE は、>>948 の入力ファイル)

注)
1. DATABASE の 110b とかは、「自社名略称 商品コード略称」が連結されてる
 フォーマットだよね? ちがうならちょっと手なおしが必要。
2. スペース区切りは本当にスペース? 全角空白だったらお手上げ。
3. 日付が 6文字の数字決めうち。
957デフォルトの名無しさん:2009/11/28(土) 13:05:57
ニコニコ静画から指定したジャンルの画像を自動で落としてくるプログラムお願いします。
958デフォルトの名無しさん:2009/11/28(土) 15:36:09
お聞きしたいことがあります。

土曜日、日曜日の0〜9時はエラー
月曜〜金曜の0〜18時は〜エラー
それ以外はOK
という感じにしたいのですが、

&time_data;
if($ww eq Sat or Sun and $hour>=0 and $hour<9){&error("エラーです");}
elsif($ww eq Mon or Tue or Wed or Thu or Fri and $hour>=0 and $hour<18){&error("エラーです");}

これだと全部エラー判定になるのですが、どこをどう修正すればいいでしょうか。
よろしくお願いします
959デフォルトの名無しさん:2009/11/28(土) 16:01:37
>>958
スレ違い

if($ww eq 'Sat' or $ww eq 'Sun'){
if($hour>=0 and $hour<9){&error("エラーです");}
}
else{
if($hour>=0 and $hour<18){&error("エラーです");}
}
960958:2009/11/28(土) 16:40:24
すいませんスレ違いでした。
ご修正ありがとうございました。うまく機能しました
961デフォルトの名無しさん:2009/11/28(土) 19:30:08
>>956
ありがとうございます。
説明不足があった点があるので書いておきます。
110bというのは、商品コード略称のみです。正確には、jal110b.orsが正しいのですが
このリストをまとめた人が、自社名略称と拡張子を省略しているため、110bのみになっています。
スペース区切りはスペースで問題ありません。
962961:2009/11/28(土) 19:36:33
さらに追記です。
文字数を計算したら、一応規則的に並んでいるのが分かりました。
出荷商品数の数字の部分は左から35文字目から始まるのですが、
$name, $sbjはそのままで、出荷商品数の合計値を文字数で換算して狙い撃ちはできないものでしょうか?
963デフォルトの名無しさん:2009/11/28(土) 21:28:15
>>955
my ($name, $sbj ) = @_ ;

my $name = 'jal' . $_[0] ;
my $sbj = $_[1] ;
へ変更。
×printf "%s\n", get_sum split /\s/, $_ ;
printf "%s\n", get_sum split /\s+/, $_ ;

にしたら望みの結果が得られるはず。
964デフォルトの名無しさん:2009/11/28(土) 22:02:41
>>962
文字数が固定してるなら、substr 関数で切り出せばいいよ。
あとはゴリゴリとコードを書くだけ。
965デフォルトの名無しさん:2009/11/28(土) 22:17:42
perlでcsvをphpとかcgiに出力できますかね。
966デフォルトの名無しさん:2009/11/29(日) 00:29:16
できます。
967デフォルトの名無しさん:2009/11/29(日) 00:36:39
>>941はもう無理ですかね…
どなたかお願い致します。
968デフォルトの名無しさん:2009/11/29(日) 00:49:28
>>957
はどうする
969デフォルトの名無しさん:2009/11/29(日) 01:58:34
>>963-964
ありがとうございます。
>>963>>955のコードをsubstrに対応させるにはどうすれば良いのでしょうか?
970デフォルトの名無しさん:2009/11/29(日) 05:27:27
>>969
ここをこう直せばおk
($sbjが他のフィールドに出てこないことが前提ですが)

while (<$fh>){
next if !/$sbj/;
my @list = split /\s+/, substr $_, 34;
$sum += $list[0];
}
971デフォルトの名無しさん:2009/11/29(日) 19:47:35
>>970
ありがとうございます。確認してみたところ、$sbj以外にも合致するフィールドが存在するみたいで、
合計値が狂ってしまうようです。
また、出力データファイル名の取引先名も規則正しく、11行目から始まるみたいなので、
next if !/$sbj/; ではなく、my @list = split /\s+/, substr $_, 34;のように文字数指定でいけないでしょうか?

再び追記なのですが、リスト参照のみの合計値の出力とは別に、
出力データファイルに存在するすべての取引先名の合計値の出力も得たいのですが、
この場合はどうすればよいのでしょうか?

お手数をおかけいたします。
972デフォルトの名無しさん:2009/11/29(日) 20:44:09
特定されない程度に文字を置き換えて入力ファイルをアップしてくれた方が早く終わりそうだけどそれは無理なのかね?
973デフォルトの名無しさん:2009/11/29(日) 20:55:00
分かりました。少々お待ちください。
974デフォルトの名無しさん:2009/11/29(日) 21:09:20
975デフォルトの名無しさん:2009/11/29(日) 21:20:43
ニコニコ静画から指定したジャンルの画像を自動で落としてくるプログラムを作りたいのですが、わかりません。

予想

API取得して
画像の番号を取り出す 正規表現?
※画像番号のあとにある"s"は取り出さない
http://lohas.nicoseiga.jp/img/ $画像番号."l"

ディレクトリに保存

差分保存する? bbsの題名ごとに??
※既に落としたものは再び見に行ったときには落とさない

繰り返し while使うのかな?
976デフォルトの名無しさん:2009/11/30(月) 04:48:57
>>974
じゃあこんな感じではいかがでしょう
while (<$fh>){
/^.{10}(\w+)\s/;
my $current = $1;
next if $current !~ /$sbj/;
my @list = split /\s+/, substr $_, 34;
$sum += $list[0];
}

サンプルファイルだと、
フィールドは13文字めから始まるように見えるのですが、
だったら適当にかえてください
977デフォルトの名無しさん:2009/11/30(月) 11:12:53
ファイル見た感じだと>>955の正規表現の先頭に\s+でいけたんだけどどこで失敗したんだ?
取引先名も英語3文字だから他で一致しなそうだけど
978デフォルトの名無しさん:2009/11/30(月) 20:40:48
>>975
すまんがその日本語から察するとあなたにプログラムは書けないと思う
979デフォルトの名無しさん:2009/12/02(水) 20:38:41
>>978
うるうる
980デフォルトの名無しさん:2009/12/04(金) 01:30:06
2chのスレをHTML保存した後AAだけにしてtxtで保存するスクリプトを作りたいのですが。
また、指定したスレではなく、AAサロンとかのスレすべてから・・・という形にしたいんですが。
981デフォルトの名無しさん:2009/12/04(金) 01:30:52
>980
ミスったので、訂正します。

2chのスレをAAだけにしてtxtで保存するスクリプトを作りたいのですが。
また、指定したスレではなく、AAサロンとかのスレすべてから・・・という形にしたいんですが。
982デフォルトの名無しさん:2009/12/04(金) 09:29:32
>>981
で、どの部分がうまく動かないのだ?
Perlの質問だからね、ソースが無いとアドバイスできないなぁ。

そのアルゴリズムの解説には本が一冊できそうだよ。
983デフォルトの名無しさん:2009/12/04(金) 09:31:18
いやぁ、質問スレじゃなかったよ。

逝ってくる。
984デフォルトの名無しさん:2009/12/04(金) 12:36:22
>>982
文章かAAかの切り分けはそんなに難しくないだろう。
形態素分析にでもかければ「文章らしさ」のチェックができるから、
スコアが低いのがAA。
AAか任意の文字列かの切り分けはAIの世界の話だが。

まあ、

ノシ
OTZ

みたいな単発AAは難しいけどな。
前者、人間にだって、予備知識がなければ熨斗なのか手を振ってるのか普通にわからん。
後者、OTZはラルフ・ウィエン記念空港の空港コードだしな。
985デフォルトの名無しさん:2009/12/04(金) 16:40:51
>>982
質問じゃなくねw?
986デフォルトの名無しさん:2009/12/04(金) 16:43:46
Perlでリクに答えるスクリプトを作るスレなんだし、書いてやろうぜぇ!
987デフォルトの名無しさん:2009/12/04(金) 17:46:39
初心者の俺でもできるリクエストなら作ってあげるけど。。。
988デフォルトの名無しさん:2009/12/05(土) 01:14:07
ニコニコ動画から作業用BGMを自動で落としてくるプログラムお願いします。
989デフォルトの名無しさん
>形態素分析にでもかければ「文章らしさ」のチェックができるから、

両手をパタパタすれば空を飛べるから。