<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>CGI・Perl例文集</title>
    <link rel="alternate" type="text/html" href="http://katsubemakito.net/cgiperl/" />
    <link rel="self" type="application/atom+xml" href="http://katsubemakito.net/cgiperl/atom.xml" />
   <id>tag:katsubemakito.net,2011:/cgiperl//5</id>
    <link rel="service.post" type="application/atom+xml" href="http://katsubemakito.net/mt/mt-atom.cgi/weblog/blog_id=5" title="CGI・Perl例文集" />
    <updated>2007-10-23T13:30:27Z</updated>
    <subtitle>CGI(Perl)のサンプルプログラムをコピー＆ペーストで使える便利集！</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type  3.33-ja</generator>
 
<entry>
    <title>画像の情報を取得する (コマンド)</title>
    <link rel="alternate" type="text/html" href="http://katsubemakito.net/cgiperl/image/imagemagick/cat159/post-72.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://katsubemakito.net/mt/mt-atom.cgi/weblog/blog_id=5/entry_id=658" title="画像の情報を取得する (コマンド)" />
    <id>tag:katsubemakito.net,2007:/cgiperl//5.658</id>
    
    <published>2007-10-23T13:12:39Z</published>
    <updated>2007-10-23T13:30:27Z</updated>
    
    <summary>ImageMagickをインストールすると自動でついてくるidentifyコマン...</summary>
    <author>
        <name>かつべ</name>
        <uri>http://katsubemakito.net</uri>
    </author>
            <category term="コマンド" />
    
    <content type="html" xml:lang="ja" xml:base="http://katsubemakito.net/cgiperl/">
        <![CDATA[ImageMagickをインストールすると自動でついてくる<strong>identify</strong>コマンドを用いれば、画像の保存形式やサイズなどを簡単に取得することが出来る。
]]>
        <![CDATA[<strong>○シンプルに表示</strong>
identifyにファイル名を渡してやると画像形式、解像度などシンプルな情報を取得できる。
<div class="code">$ <strong style="color:red">identify</strong> hoge.jpg
hoge.jpg JPEG 303x431 303x431+0+0 DirectClass 8-bit 145.752kb</div>


<strong>○詳細に表示</strong>
-verboseオプションをつけるとかなり詳細な情報が取得できる。
<div class="code">$ identify <strong style="color:red">-verbose</strong> hoge.jpg
Image: hoge.jpg
  Format: JPEG (Joint Photographic Experts Group JFIF format)
  Class: DirectClass
  Geometry: 303x431+0+0
  Type: ColorSeparation
  Endianess: Undefined
  Colorspace: CMYK
  Depth: 8-bit
  Channel depth:
    Cyan: 8-bit
    Magenta: 8-bit
    Yellow: 8-bit
    Black: 8-bit
  Channel statistics:
    Cyan:
      Min: 0 (0)
      Max: 255 (1)
      Mean: 111.969 (0.439093)
      Standard deviation: 75.4756 (0.295983)
    Magenta:
      Min: 0 (0)
      Max: 255 (1)
      Mean: 116.246 (0.455867)
      Standard deviation: 50.2108 (0.196905)
    Yellow:
      Min: 0 (0)
      Max: 255 (1)
      Mean: 143.773 (0.563817)
      Standard deviation: 69.3664 (0.272025)
    Black:
      Min: 0 (0)
      Max: 255 (1)
      Mean: 67.2185 (0.263602)
      Standard deviation: 85.1329 (0.333854)
  Total ink density: 363%
  Rendering intent: Undefined
  Resolution: 350x350
  Units: undefined
  Filesize: 145.752kb
  Interlace: None
  Background color: white
  Border color: cmyk(223,223,223,0)
  Matte color: grey74
  Transparent color: black
  Page geometry: 303x431+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: JPEG
  Quality: 99
  Orientation: TopLeft
  Exif:ColorSpace: 65535
  Exif:Compression: 6
  Exif:DateTime: 2007:03:26 21:05:58
  Exif:ExifImageLength: 431
  Exif:ExifImageWidth: 303
  Exif:ExifOffset: 164
  Exif:JPEGInterchangeFormat: 302
  Exif:JPEGInterchangeFormatLength: 7335
  Exif:Orientation: 1
  Exif:ResolutionUnit: 2
  Exif:Software: Adobe Photoshop CS2 Windows
  Exif:XResolution: 3500000/10000
  Exif:YResolution: 3500000/10000
  Jpeg:colorspace: 4
  Jpeg:sampling-factor: 1x1,1x1,1x1,1x1
  Rdf:about:
  Signature: 73f86ebc098f1c4708e4cda5bd95bc55fceb919b25fb6394744433518fc99101
  Xmlns:exif: http://ns.adobe.com/exif/1.0/
  Profile-8bim: 9062 bytes
  Profile-exif: 7643 bytes
  Profile-xmp: 14996 bytes
  Tainted: False
  Version: ImageMagick 6.3.6 10/19/07 Q16 http://www.imagemagick.org
</div>


ちなみに、複数ファイルの指定もできます。
<div class="code">$ identify hoge.jpg huga.jpg
hoge.jpg JPEG 303x431 303x431+0+0 DirectClass 8-bit 145.752kb
huga.jpg[1] JPEG 210x298 210x298+0+0 DirectClass 8-bit 16.1895kb</div>
]]>
    </content>
</entry>
<entry>
    <title>Apacheのバージョンアップを行う(Linux)</title>
    <link rel="alternate" type="text/html" href="http://katsubemakito.net/cgiperl/install/apache/apachelinux.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://katsubemakito.net/mt/mt-atom.cgi/weblog/blog_id=5/entry_id=655" title="Apacheのバージョンアップを行う(Linux)" />
    <id>tag:katsubemakito.net,2007:/cgiperl//5.655</id>
    
    <published>2007-07-07T13:01:08Z</published>
    <updated>2007-07-07T14:05:06Z</updated>
    
    <summary>ここではソースからコンパイルしバージョンアップする方法を簡単に解説する。基本的に...</summary>
    <author>
        <name>かつべ</name>
        <uri>http://katsubemakito.net</uri>
    </author>
            <category term="Apache" />
    
    <content type="html" xml:lang="ja" xml:base="http://katsubemakito.net/cgiperl/">
        <![CDATA[ここではソースからコンパイルしバージョンアップする方法を簡単に解説する。基本的には再コンパイルするだけ。『やり直し』を行う場合もこの手順を参考にすれば良い。<br />
]]>
        <![CDATA[<p>手順としては大まかに以下のようになる。ようはコンパイル後に生成された実行ファイルで上書きしているだけなのだ。<br />
</p>
<ol>
<li>既存ファイルのバックアップ</li>
<li>前回のコンパイルオプションの確認</li>
<li>ソースファイルのダウンロード・解凍</li>
<li>configure</li>
<li>make</li>
<li>httpd stop</li>
<li>sudo make install</li>
<li>httpd start</li>
</ol>
<br />
以下に示すのは1.3系の例だが、2.xの場合はディレクトリ名を「apache2」と読み替えれば良い。<br />
<br />
<strong>■既存ファイルのバックアップ</strong><br />
最低でも設定ファイルはバックアップ。切り返しを考えapacheディレクトを一通りバックアップしておくのが良い。
<div class="code">$ cp /usr/local/apache/conf/*  ~/backup</div>
<br />

<strong>■前回のコンパイルオプションの確認</strong><br />
コンパイルする際に指定するオプションの値は、「config.status」というファイルに保存される。前回インストール(バージョンアップ)した際のソースファイルをおいてあるディレクトリの中をのぞき、中身をcatしてやると前回のオプション値が確認できる。<br />
<div class="code">
$ cd /usr/local/src/apache_1.3.34<br />
$ <strong style="color:red">cat config.status</strong><br />
<font size="-2">#!/bin/sh<br />
##<br />
##  config.status -- APACI auto-generated configuration restore script<br />
##<br />
##  Use this shell script to re-run the APACI configure script for<br />
##  restoring your configuration. Additional parameters can be supplied.<br />
##<br />
<br />
OPTIM="-O2" \<br />
LIBS="-lpthread" \<br />
SSL_BASE="SYSTEM" \<br />
./configure \<br />
"--with-layout=Apache" \<br />
"--enable-shared=ssl" \<br />
"--enable-module=ssl" \<br />
"$@"<br />
</font></div>
<br />
逆に言えば使用したディレクトリは丸ごと残しておくことが求められると言うことである。作業履歴の記録にもなるため間違っても消してはならない。<br />
<br />

<strong>■バージョンアップ開始～終了</strong><br />
まずはダウンロードする。<a href="http://www.apache.jp/misc/download.html">ここらへん</a>からお好みのバージョンをダウンロードしてくれば良い。なお、コンパイルするファイルは「/usr/local/src」あたりに置いておくのが慣わしとなっているので特別な理由が無ければ従っておくこと。<br />
<div class="code">$ cd /usr/local/src<br />
$ wget ftp://ftp.hoge.co.jp/apache/apache_1.3.37.tar.gz</div>
<br />
ダウンロードしたら解凍しディレクトリを移る。<br />
<div class="code">$ tar zxvf apache_1.3.37.tar.gz<br />
$ cd apache_1.3.37</div>
<br />
特に変更点などなければ前回の「config.status」を参考にし、「configure」を実行する。
<div class="code">$ <strong style="color:red">./configure</strong> --with-layout=Apache --enable-shared=ssl --enable-module=ssl</div>
<br />
「configure 」の内容に従いソースファイルをコンパイルする。正常終了した場合でも特にメッセージは出ないので、エラーが表示されなければ気にせず次に行く。<br />
<div class="code">$ <strong style="color:red">make</strong></div>
<br />
最後にサーバを停止しインストールを行う。これにはroot権限が必要。これでバージョンアップのための作業は一段落となる。<br />
<div class="code">$ <strong style="color:red">sudo /etc/init.d/apache stop</strong><br />
$ <strong style="color:red">sudo make install</strong><br />
$ <strong style="color:red">sudo  /etc/init.d/apache start</strong></div>
<br />
<strong>■バージョンの確認</strong><br />
念のため最後にバージョンを確認しておこう。ここで自分が適用したバージョンが表示されればOK。ブラウザからも正常に動いているかどうかを確認し全作業が終了となる。
<div class="code">$<strong style="color:red">/usr/local/apache/bin/httpd -v</strong><br />
Server version: Apache/1.3.34 (Unix)<br />
Server built:   Feb 16 2006 04:41:40</div>
<br />
<br />
同系統(1.3系から1.3系、2.0系→2.0系など)のバージョンアップの場合は、原則この手順になる。(私の場合は)念のためconfigureの前からサーバを止めるが、「make install」前でも問題ないだろう。またsudoの代わりに「su -」でrootになってももちろん良い。要はroot権限があれば良いのだ。<br />
<br />
なお、パッケージ管理ソフト(atp, yumなど)を使用しているなら、あらかじめ用意されているコマンドを利用すれば良い。<br />
<br />
aptなら以下のようにする。updateでファイルリストを更新しupgradeで実行する。
<div class="code">
$ sudo apt-get update<br />
$ sudo apt-get upgrade<br />
</div>]]>
    </content>
</entry>
<entry>
    <title>Twitterで友達のステータスをまとめて取得する</title>
    <link rel="alternate" type="text/html" href="http://katsubemakito.net/cgiperl/cgi/cat150/nettwitter/twitter-nettwitter-1.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://katsubemakito.net/mt/mt-atom.cgi/weblog/blog_id=5/entry_id=654" title="Twitterで友達のステータスをまとめて取得する" />
    <id>tag:katsubemakito.net,2007:/cgiperl//5.654</id>
    
    <published>2007-06-16T15:39:40Z</published>
    <updated>2007-06-16T16:19:38Z</updated>
    
    <summary>Twitterの公式APIを利用して、Perlから友達のステータスを過去分などま...</summary>
    <author>
        <name>かつべ</name>
        <uri>http://katsubemakito.net</uri>
    </author>
            <category term="Net::Twitter" />
    
    <content type="html" xml:lang="ja" xml:base="http://katsubemakito.net/cgiperl/">
        <![CDATA[<p><a href="http://twitter.com/">Twitter</a>の公式APIを利用して、Perlから友達のステータスを過去分などまとめて取得することが可能だ。<a href="http://search.cpan.org/~cthom/Net-Twitter-1.04/lib/Net/Twitter.pm"><strong>Net::Twitterモジュール</strong></a>を用いる。
</p>]]>
        <![CDATA[<p>
過去24時間以内に更新された自分の友達(friends)のステータス(発言)を、最大20件まで取得することができる。発言内容と合わせて、発言したユーザーの情報も自動的にくっついてくる。
</p>

<div class="code"><tt><pre>;<span class="synComment">#</span>
;<span class="synComment">#Twitterの自分・友人のステータスを取得する</span>
;<span class="synComment">#</span>

<span class="synComment">#--------------------------------------#</span>
<span class="synComment">#モジュール</span>
<span class="synComment">#--------------------------------------#</span>
<span class="synStatement">use strict</span>;
<span class="synStatement">use </span>Net::Twitter;

<span class="synComment">#------------------------#</span>
<span class="synComment">#        ログイン        #</span>
<span class="synComment">#------------------------#</span>
<span class="synStatement">my</span> <span class="synIdentifier">$twit</span> = Net::Twitter-&gt;<span class="synStatement">new</span>(
          <span class="synConstant">username </span>=&gt; <span class="synConstant">"katsube"</span>   <span class="synComment">#ユーザー名</span>
        , <span class="synConstant">password </span>=&gt; <span class="synConstant">"hogehoge"</span>  <span class="synComment">#パスワード</span>
      );

<span class="synComment">#------------------------#</span>
<span class="synComment">#        情報取得        #</span>
<span class="synComment">#------------------------#</span>
<span class="synComment">#-- Twitterサーバから取得 --#</span>
<span class="synStatement">my</span> <span class="synIdentifier">$array_ref</span> = <span class="synIdentifier">$twit</span>-&gt;friends_timeline();

<span class="synComment">#-- 取得した情報を表示する --#</span>
<span class="synStatement">foreach</span> <span class="synStatement">my</span> <span class="synIdentifier">$hash_ref</span> ( <span class="synIdentifier">@$array_ref</span> ){
  <span class="synComment">#-- 発言 --#</span>
  <span class="synStatement">print</span> <span class="synConstant">'      ID：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'id'</span>},         <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
  <span class="synStatement">print</span> <span class="synConstant">'  文字列：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'text'</span>},       <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
  <span class="synStatement">print</span> <span class="synConstant">'生成時間：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'created_at'</span>}, <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;

  <span class="synComment">#-- 発言したユーザー情報 --#</span>
  <span class="synStatement">print</span> <span class="synConstant">'            ID：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'user'</span>}{<span class="synConstant">'id'</span>},                <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
  <span class="synStatement">print</span> <span class="synConstant">'名前(FullName)：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'user'</span>}{<span class="synConstant">'name'</span>},              <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
  <span class="synStatement">print</span> <span class="synConstant">'名前(Username)：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'user'</span>}{<span class="synConstant">'screen_name'</span>},       <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
  <span class="synStatement">print</span> <span class="synConstant">'     画像(URL)：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'user'</span>}{<span class="synConstant">'profile_image_url'</span>}, <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
  <span class="synStatement">print</span> <span class="synConstant">'           URL：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'user'</span>}{<span class="synConstant">'url'</span>},               <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
  <span class="synStatement">print</span> <span class="synConstant">'        説明文：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'user'</span>}{<span class="synConstant">'description'</span>},       <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
  <span class="synStatement">print</span> <span class="synConstant">'          場所：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'user'</span>}{<span class="synConstant">'location'</span>},          <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
}</pre></tt></div>
<br />
○実行結果<br />
<div class="code"><tt><pre>      ID：107283632
  文字列：今更ながらスチームボーイ見た。普通に面白いじゃん（ｗ
生成時間：Sat Jun 16 14:59:23 +0000 2007
            ID：6846192
名前(FullName)：Makito Katsube
名前(Username)：katsube
     画像(URL)：http://assets2.twitter.com/system/user/profile_image/6846192/normal/8641_2991091234.jpg?1181964549
           URL：
        説明文：
          場所：

      ID：107280932
  文字列：ねむいっす
生成時間：Sat Jun 16 14:56:13 +0000 2007
            ID：6853682
名前(FullName)：ねぼすけ
名前(Username)：Nebosuke
     画像(URL)：http://assets2.twitter.com/system/user/profile_image/6853682/normal/4.jpg?1182005467
           URL：http://www.ichikoro.com
        説明文：I'm sleeping not beautiful. But I wait your kiss(w
          場所：Tokyo
</pre></tt></div>

<p>
新しい物から順番に並んでいる。リストの中には自分自身の発言も含まれる。もし取り除きたい場合は取得した後に$hash_ref->{'user'}{'id'}などを参照し取り除く。
</p>

<p>
返却される文字コードはUTFｰ8となっている。もし変更する必要があるなら、JcodeやEncodeを用いて変換してやれば良い。
</p>]]>
    </content>
</entry>
<entry>
    <title>Twitterの友達情報(friends)を取得する</title>
    <link rel="alternate" type="text/html" href="http://katsubemakito.net/cgiperl/cgi/cat150/nettwitter/twitterfriends-nettwitter.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://katsubemakito.net/mt/mt-atom.cgi/weblog/blog_id=5/entry_id=653" title="Twitterの友達情報(friends)を取得する" />
    <id>tag:katsubemakito.net,2007:/cgiperl//5.653</id>
    
    <published>2007-06-16T15:21:02Z</published>
    <updated>2007-06-16T16:19:38Z</updated>
    
    <summary>Twitterの公式APIを利用し、Perlから友達(friends)の情報を取...</summary>
    <author>
        <name>かつべ</name>
        <uri>http://katsubemakito.net</uri>
    </author>
            <category term="Net::Twitter" />
    
    <content type="html" xml:lang="ja" xml:base="http://katsubemakito.net/cgiperl/">
        <![CDATA[<p><a href="http://twitter.com/">Twitter</a>の公式APIを利用し、Perlから友達(friends)の情報を取得することが可能だ。<a href="http://search.cpan.org/~cthom/Net-Twitter-1.04/lib/Net/Twitter.pm"><strong>Net::Twitterモジュール</strong></a>を使用すれば良い。
</p>]]>
        <![CDATA[<p>
流れとしてはインスタンスを生成と同時にログインし、friendsメソッドを叩くだけと非常にシンプルだ。
</p>

<div class="code"><tt><pre>;<span class="synComment">#</span>
;<span class="synComment">#Twitterの友達(friends)情報を取得する</span>
;<span class="synComment">#</span>

<span class="synComment">#--------------------------------------#</span>
<span class="synComment">#モジュール</span>
<span class="synComment">#--------------------------------------#</span>
<span class="synStatement">use strict</span>;
<span class="synStatement">use </span>Net::Twitter;

<span class="synComment">#------------------------#</span>
<span class="synComment">#        ログイン        #</span>
<span class="synComment">#------------------------#</span>
<span class="synStatement">my</span> <span class="synIdentifier">$twit</span> = Net::Twitter-&gt;<span class="synStatement">new</span>(
          <span class="synConstant">username </span>=&gt; <span class="synConstant">"katsube"</span>   <span class="synComment">#ユーザー名</span>
        , <span class="synConstant">password </span>=&gt; <span class="synConstant">"hogehoge"</span>  <span class="synComment">#パスワード</span>
      );

<span class="synComment">#------------------------#</span>
<span class="synComment">#        情報取得        #</span>
<span class="synComment">#------------------------#</span>
<span class="synComment">#-- Twitterサーバから取得 --#</span>
<span class="synStatement">my</span> <span class="synIdentifier">$array_ref</span> = <span class="synIdentifier">$twit</span>-&gt;friends();

<span class="synComment">#-- 取得した情報を表示する --#</span>
<span class="synStatement">foreach</span> <span class="synStatement">my</span> <span class="synIdentifier">$hash_ref</span> ( <span class="synIdentifier">@$array_ref</span> ){
  <span class="synComment">#-- ステータス関連 --#</span>
  <span class="synStatement">print</span> <span class="synConstant">'      ID：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'status'</span>}{<span class="synConstant">'id'</span>},         <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
  <span class="synStatement">print</span> <span class="synConstant">'  文字列：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'status'</span>}{<span class="synConstant">'text'</span>},       <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
  <span class="synStatement">print</span> <span class="synConstant">'生成時間：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'status'</span>}{<span class="synConstant">'created_at'</span>}, <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;

  <span class="synComment">#-- プロフィール関連 --#</span>
  <span class="synStatement">print</span> <span class="synConstant">'            ID：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'id'</span>},                <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
  <span class="synStatement">print</span> <span class="synConstant">'名前(FullName)：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'name'</span>},              <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
  <span class="synStatement">print</span> <span class="synConstant">'名前(Username)：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'screen_name'</span>},       <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
  <span class="synStatement">print</span> <span class="synConstant">'     画像(URL)：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'profile_image_url'</span>}, <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
  <span class="synStatement">print</span> <span class="synConstant">'           URL：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'url'</span>},               <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
  <span class="synStatement">print</span> <span class="synConstant">'        説明文：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'description'</span>},       <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
  <span class="synStatement">print</span> <span class="synConstant">'          場所：'</span>, <span class="synIdentifier">$hash_ref</span>-&gt;{<span class="synConstant">'location'</span>},          <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
}</pre></tt></div>
<br />
○実行結果<br />
<div class="code"><tt><pre>      ID：107280932
  文字列：ねむいっす
生成時間：Sat Jun 16 14:56:13 +0000 2007

            ID：6853682
名前(FullName)：ねぼすけ
名前(Username)：Nebosuke
     画像(URL)：http://assets2.twitter.com/system/user/profile_image/6853682/normal/4.jpg?1182005467
           URL：http://www.ichikoro.com
        説明文：I'm sleeping not beautiful. But I wait your kiss(w
          場所：Tokyo
</pre></tt></div>


<p>
「Settings」で情報が設定されていない場合は、もちろん値を取得することは出来ない。APIとして公開されていないデータを取得することはこちらももちろんのこと出来ない。
</p>

<p>
注意点としては、データの変更を行った後すぐにはAPI上にその変化が現れない点だ。具体的にどの程度の期間かは分からないが、一定時間は古いデータが保持されるようだ。Twitterをブラウザで見たときと取得できる情報に差異がある場合は、API自体のキャッシュを疑ってみると良いかもしれない。
</p>

<p>
なお、返却されるデータの文字コードはUTF-8である。必要があればJcodeやEncodeなどで文字コードを変更してやれば良い。
</p>
]]>
    </content>
</entry>
<entry>
    <title>Twitterのステータスを更新する</title>
    <link rel="alternate" type="text/html" href="http://katsubemakito.net/cgiperl/cgi/cat150/nettwitter/twitter-nettwitter.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://katsubemakito.net/mt/mt-atom.cgi/weblog/blog_id=5/entry_id=652" title="Twitterのステータスを更新する" />
    <id>tag:katsubemakito.net,2007:/cgiperl//5.652</id>
    
    <published>2007-06-16T14:17:57Z</published>
    <updated>2007-06-16T16:19:38Z</updated>
    
    <summary>Twitterの公式APIを利用して、Perlからステータスを更新することが可能...</summary>
    <author>
        <name>かつべ</name>
        <uri>http://katsubemakito.net</uri>
    </author>
            <category term="Net::Twitter" />
    
    <content type="html" xml:lang="ja" xml:base="http://katsubemakito.net/cgiperl/">
        <![CDATA[<p><a href="http://twitter.com/">Twitter</a>の公式APIを利用して、Perlからステータスを更新することが可能だ。<a href="http://search.cpan.org/~cthom/Net-Twitter-1.04/lib/Net/Twitter.pm"><strong>Net::Twitterモジュール</strong></a>を使えばいとも簡単に実現できる。
</p>]]>
        <![CDATA[<p><a href="http://search.cpan.org/~cthom/Net-Twitter-1.04/lib/Net/Twitter.pm">Net::Twitterモジュール</a>はもちろん標準では入らないので別途インストールする。同時に「LWP::UserAgent」「JSON::Any」も必要だ。
</p>

<div class="code"><tt><pre>;<span class="synComment">#</span>
;<span class="synComment">#PerlからTwitterで発言する</span>
;<span class="synComment">#</span>

<span class="synComment">#--------------------------------------#</span>
<span class="synComment">#モジュール</span>
<span class="synComment">#--------------------------------------#</span>
<span class="synStatement">use strict</span>;
<span class="synStatement">use </span>Net::Twitter;
<span class="synStatement">use </span>Jcode;

<span class="synComment">#------------------------#</span>
<span class="synComment">#        ログイン        #</span>
<span class="synComment">#------------------------#</span>
<span class="synStatement">my</span> <span class="synIdentifier">$twit</span> = Net::Twitter-&gt;<span class="synStatement">new</span>(
          <span class="synConstant">username</span>=&gt;<span class="synConstant">"katsube"</span>   <span class="synComment">#ユーザー名</span>
        , <span class="synConstant">password</span>=&gt;<span class="synConstant">"hogehoge"</span>  <span class="synComment">#パスワード</span>
      );

<span class="synComment">#------------------------#</span>
<span class="synComment">#         発 言          #</span>
<span class="synComment">#------------------------#</span>
<span class="synComment">#-- 発言するセリフの準備 --#</span>
<span class="synStatement">my</span> <span class="synIdentifier">$text</span> = <span class="synConstant">'ふがふが'</span>;

<span class="synComment">#-- UTF8へ --#</span>
Jcode::convert(<span class="synIdentifier">\$text</span>, <span class="synConstant">'utf8'</span>);

<span class="synComment">#-- Twitterへ送信 --#</span>
<span class="synStatement">my</span> <span class="synIdentifier">$result</span> = <span class="synIdentifier">$twit</span>-&gt;update(<span class="synIdentifier">$text</span>);</pre></tt></div>
<br />
○実行結果<br />
<img alt="twitter_update.jpg" src="http://katsubemakito.net/cgiperl/image/twitter_update.jpg" width="350" height="279" /><br />

発言は必ずUTF8で行うこと。これだけ気をつけておけば日本語も問題なく通る。書くまでも無いと思うが、ログインしているユーザーのステータスを、一回のアップデートにつき一回の更新が行える。<br />
<br />
また前回と全く同じ文字列ははじかれるようなので(未検証)、更新がされない場合は適当に文字列を変えてトライすると良い。<br />
<br />]]>
    </content>
</entry>
<entry>
    <title>イベイシブ攻撃用のプログラムを組む</title>
    <link rel="alternate" type="text/html" href="http://katsubemakito.net/cgiperl/cgi/cat148/post-71.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://katsubemakito.net/mt/mt-atom.cgi/weblog/blog_id=5/entry_id=651" title="イベイシブ攻撃用のプログラムを組む" />
    <id>tag:katsubemakito.net,2007:/cgiperl//5.651</id>
    
    <published>2007-06-06T16:01:25Z</published>
    <updated>2007-06-16T16:19:38Z</updated>
    
    <summary>ネット上での不正なハッキング(クラッキング)手段の一つ、イベイシブ攻撃が具体的に...</summary>
    <author>
        <name>かつべ</name>
        <uri>http://katsubemakito.net</uri>
    </author>
            <category term="セキュリティ" />
    
    <content type="html" xml:lang="ja" xml:base="http://katsubemakito.net/cgiperl/">
        <![CDATA[<p>ネット上での不正なハッキング(クラッキング)手段の一つ、<a href="http://www.itmedia.co.jp/news/articles/0706/05/news055.html">イベイシブ攻撃</a>が具体的にどのようなコードになるのか解説する。非常にシンプルなコード、原理で実現できる。<br />
<small style="color:red">※セキュリティ対策用の記事です。仕組みを解説するためのコードであって幇助しているわけではありません。実際に悪用しないでください。</small></p>
]]>
        <![CDATA[<p>
過去にアクセスのあったIPアドレスを記録しておき、現在のアクセス者が履歴にあれば正常なページを、無ければ違法なページを表示するというもの。また検索エンジンにもSPAM的な行為を行い、正常なページが登録されるように仕組まれている。<br />
<br />
わずかこれだけのコードで実現できてしまうという簡便さなのですが、そのシンプルさが逆に摘発のしにくさを招いているのでしょう。なお、ここでは実際に運用するには効率が悪くなるようわざと作っています。
</p>


<div class="code"><tt><pre><span class="synPreProc">#!/usr/bin/perl</span>

;<span class="synComment">#</span>
;<span class="synComment">#イベイシブ攻撃用プログラム(CGI)</span>
;<span class="synComment">#</span>

<span class="synComment">#--------------------------------------#</span>
<span class="synComment">#モジュール</span>
<span class="synComment">#--------------------------------------#</span>
<span class="synStatement">use strict</span>;

<span class="synComment">#--------------------------------------#</span>
<span class="synComment">#定数</span>
<span class="synComment">#--------------------------------------#</span>
<span class="synComment">#IPアドレス保存用ファイル</span>
<span class="synStatement">use </span>constant <span class="synConstant">IP_DAT </span>=&gt; <span class="synConstant">'ip.txt'</span>;

<span class="synComment">#検索エンジンロボット用データファイル</span>
<span class="synStatement">use </span>constant <span class="synConstant">SEO_DAT </span>=&gt; <span class="synConstant">'seo.txt'</span>;

<span class="synComment">#--------------------------------------#</span>
<span class="synComment">#             メイン処理               #</span>
<span class="synComment">#--------------------------------------#</span>
<span class="synStatement">package</span><span class="synType"> main;</span>
{
  <span class="synStatement">my</span> <span class="synIdentifier">$db_ip</span>  = <span class="synConstant">''</span>;
  <span class="synStatement">my</span> <span class="synIdentifier">$db_seo</span> = <span class="synConstant">''</span>;
  <span class="synStatement">my</span> <span class="synIdentifier">$ip</span>     = <span class="synIdentifier">$ENV</span>{<span class="synConstant">'REMOTE_ADDR'</span>};

  <span class="synComment">#------------------------#</span>
  <span class="synComment">#        初期処理        #</span>
  <span class="synComment">#------------------------#</span>
  <span class="synComment">#-- 過去にアクセスのあったIPアドレスのリストを取得 --#</span>
  <span class="synIdentifier">$db_ip</span> = getDataFile(IP_DAT);

  <span class="synComment">#-- 検索エンジンロボットのIPアドレスのリストを取得 --#</span>
  <span class="synIdentifier">$db_seo</span> = getDataFile(SEO_DAT);


  <span class="synComment">#------------------------#</span>
  <span class="synComment">#    正常なページ表示    #</span>
  <span class="synComment">#------------------------#</span>
  <span class="synStatement">if</span>( <span class="synStatement">exists</span>( <span class="synIdentifier">$db_ip</span>-&gt;{<span class="synIdentifier">$ip</span>} )           <span class="synComment">#このifが実行されれば</span>
        <span class="synStatement">or</span>  <span class="synStatement">exists</span>( <span class="synIdentifier">$db_seo</span>-&gt;{<span class="synIdentifier">$ip</span>} ) ){ <span class="synComment">#リピーターと判定</span>
    
    <span class="synComment">#-- リピーター or 検索エンジン --#</span>
    <span class="synIdentifier">$|</span>=<span class="synConstant">1</span>;
    <span class="synStatement">print</span> <span class="synConstant">"Content-type: text/html</span><span class="synSpecial">\n\n</span><span class="synConstant">"</span>;
    <span class="synStatement">print</span> getHTML_Normal();
  }
  <span class="synComment">#------------------------#</span>
  <span class="synComment">#    違法なページ表示    #</span>
  <span class="synComment">#------------------------#</span>
  <span class="synStatement">else</span>{
    <span class="synComment">#-- 初めての人には違法ページ --#</span>
    <span class="synIdentifier">$|</span>=<span class="synConstant">1</span>;
    <span class="synStatement">print</span> <span class="synConstant">"Content-type: text/html</span><span class="synSpecial">\n\n</span><span class="synConstant">"</span>;
    <span class="synStatement">print</span> getHTML_Illegal();

    <span class="synComment">#-- IPアドレスのリストに追加 --#</span>
    putDataFile(IP_DAT, <span class="synIdentifier">$ip</span>);
  }

  <span class="synStatement">exit</span>;
}


<span class="synComment">#-------------------------------------</span>
<span class="synComment">#データファイルに情報保存</span>
<span class="synComment">#-------------------------------------</span>
<span class="synStatement">sub</span><span class="synIdentifier"> putDataFile </span>{
  <span class="synStatement">my</span> <span class="synIdentifier">$file</span> = <span class="synStatement">shift</span> || <span class="synStatement">return</span>(<span class="synStatement">undef</span>);
  <span class="synStatement">my</span> <span class="synIdentifier">$ip</span>   = <span class="synStatement">shift</span>;

  <span class="synStatement">open</span>(<span class="synIdentifier">DAT</span>, <span class="synConstant">"&gt;&gt;</span><span class="synIdentifier">$file</span><span class="synConstant">"</span>) <span class="synStatement">or</span> <span class="synStatement">die</span>(<span class="synIdentifier">$!</span>);
  <span class="synStatement">flock</span>(<span class="synIdentifier">DAT</span>, <span class="synConstant">2</span>);
  <span class="synStatement">print</span> <span class="synIdentifier">DAT</span> <span class="synConstant">"</span><span class="synIdentifier">$ip</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
  <span class="synStatement">close</span>(<span class="synIdentifier">DAT</span>);
}

<span class="synComment">#-------------------------------------</span>
<span class="synComment">#データファイルから情報取得</span>
<span class="synComment">#-------------------------------------</span>
<span class="synStatement">sub</span><span class="synIdentifier"> getDataFile </span>{
  <span class="synStatement">my</span> <span class="synIdentifier">$file</span> = <span class="synStatement">shift</span> || <span class="synStatement">return</span>(<span class="synStatement">undef</span>);
  <span class="synStatement">my</span> <span class="synIdentifier">%buff</span> = ();

  <span class="synStatement">open</span>(<span class="synIdentifier">DAT</span>, <span class="synIdentifier">$file</span>) <span class="synStatement">or</span> <span class="synStatement">die</span>(<span class="synIdentifier">$!</span>);
  <span class="synStatement">while</span>(<span class="synIdentifier">&lt;DAT&gt;</span>){
    <span class="synStatement">chomp</span>;
    <span class="synIdentifier">$buff</span>{<span class="synIdentifier">$_</span>} = <span class="synConstant">1</span>;
  }
  <span class="synStatement">close</span>(<span class="synIdentifier">DAT</span>);

  <span class="synStatement">return</span>(<span class="synIdentifier">\%buff</span>);
}

<span class="synComment">#-------------------------------------</span>
<span class="synComment">#健全なサイト用HTML</span>
<span class="synComment">#-------------------------------------</span>
<span class="synStatement">sub</span><span class="synIdentifier"> getHTML_Normal</span>{
  <span class="synStatement">return</span>(<span class="synConstant">&lt;&lt;'END_OF_HTML');</span>
<span class="synConstant">&lt;html&gt;</span>
<span class="synConstant">&lt;head&gt;&lt;title&gt;健全なサイトのHTMLを書く&lt;/title&gt;&lt;/head&gt;</span>
<span class="synConstant">&lt;body&gt;</span>
<span class="synConstant">  &lt;h1&gt;ほげほげ&lt;/h1&gt;</span>
<span class="synConstant">&lt;/body&gt;</span>
<span class="synConstant">&lt;/html&gt;</span>
<span class="synConstant">END_OF_HTML</span>
}

<span class="synComment">#-------------------------------------</span>
<span class="synComment">#違法なサイト用HTML</span>
<span class="synComment">#-------------------------------------</span>
<span class="synStatement">sub</span><span class="synIdentifier"> getHTML_Illegal</span>{
  <span class="synStatement">return</span>(<span class="synConstant">&lt;&lt;'END_OF_HTML');</span>
<span class="synConstant">&lt;html&gt;</span>
<span class="synConstant">&lt;head&gt;&lt;title&gt;違法なサイトのHTMLを書く&lt;/title&gt;&lt;/head&gt;</span>
<span class="synConstant">&lt;body&gt;</span>
<span class="synConstant">  &lt;h1&gt;ふがふが&lt;/h1&gt;</span>
<span class="synConstant">&lt;/body&gt;</span>
<span class="synConstant">&lt;/html&gt;</span>
<span class="synConstant">END_OF_HTML</span>
}</pre></tt></div>
<br />
<br />


<strong><a href="http://www.itmedia.co.jp/news/articles/0706/05/news055.html">新種のWeb攻撃「イベイシブ攻撃」とは何か</a></strong>(ITmedia)
<blockquote>Finjanは、イベイシブ（evasive）攻撃は技術レベルが「大きく進歩」しており、ドライブバイダウンロードやコード難読化をはるかに超えているとしている。攻撃者は不正なコードの露出を極力避けるために、特定のWebサイトやWebページへのビジターのIPアドレスを追跡し、その情報を利用して、各IPアドレスから不正なコードへのアクセスを1回に限定する。同じIPアドレスから不正なページに2回目のアクセスを試みると、無害なページが表示される。不正なページの痕跡はすべて完全に消えるという。
　不正なコードの露出を抑えて検出される可能性を低くするほか、イベイシブ攻撃ではURLフィルタリングやネット評判監視サービス、検索エンジンが使っているWebクローラーのIPアドレスを特定して、これらのエンジンに合法的なコンテンツを返し、誤って正規のサイトに分類される可能性を高めることができる。
</blockquote>]]>
    </content>
</entry>
<entry>
    <title>配列の値をキーにしたハッシュを作成する</title>
    <link rel="alternate" type="text/html" href="http://katsubemakito.net/cgiperl/variable/hash/post-70.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://katsubemakito.net/mt/mt-atom.cgi/weblog/blog_id=5/entry_id=650" title="配列の値をキーにしたハッシュを作成する" />
    <id>tag:katsubemakito.net,2007:/cgiperl//5.650</id>
    
    <published>2007-06-01T17:03:28Z</published>
    <updated>2007-06-16T16:19:38Z</updated>
    
    <summary>配列Aに入っている全ての値を、ハッシュHのキーにしたい。これは一行で解決する。 ...</summary>
    <author>
        <name>かつべ</name>
        <uri>http://katsubemakito.net</uri>
    </author>
            <category term="ハッシュ(連想配列)" />
            <category term="リスト(配列)" />
    
    <content type="html" xml:lang="ja" xml:base="http://katsubemakito.net/cgiperl/">
        <![CDATA[配列Aに入っている全ての値を、ハッシュHのキーにしたい。これは一行で解決する。<br />
]]>
        <![CDATA[<div class="code"><tt><pre><span class="synPreProc">#!/usr/bin/perl</span>

;<span class="synComment">#</span>
;<span class="synComment">#配列の値をキーにしたハッシュを作成</span>
;<span class="synComment">#</span>

<span class="synStatement">use strict</span>;
<span class="synStatement">use </span>Data::Dumper;

<span class="synComment">#---------------------------------------#</span>
<span class="synComment">#準備</span>
<span class="synComment">#---------------------------------------#</span>
<span class="synStatement">my</span> <span class="synIdentifier">@a</span> = (<span class="synConstant">0.</span>.<span class="synConstant">9</span>);
<span class="synStatement">my</span> <span class="synIdentifier">%h</span> = ();

<span class="synComment">#---------------------------------------#</span>
<span class="synComment">#作成</span>
<span class="synComment">#---------------------------------------#</span>
<span class="synIdentifier">@h</span>{<span class="synIdentifier">@a</span>} = (<span class="synConstant">'a'</span>..<span class="synConstant">'j'</span>);

<span class="synComment">#---------------------------------------#</span>
<span class="synComment">#表示</span>
<span class="synComment">#---------------------------------------#</span>
<span class="synStatement">print</span> <span class="synIdentifier">Dumper</span>(<span class="synIdentifier">\%h</span>);
</pre></tt></div>
<br />
<b>○実行結果</b><br />
左辺がハッシュのキー、右辺が値<br />
<div class="code"><tt><pre>$VAR1 = {
          '6' => 'g',
          '3' => 'd',
          '7' => 'h',
          '9' => 'j',
          '2' => 'c',
          '8' => 'i',
          '1' => 'b',
          '4' => 'e',
          '0' => 'a',
          '5' => 'f'
        };
</pre></tt></div>
<br />
<br />
ここではハッシュの値を('a'..'j')としたが、「@h{@a} = ();」とすればすべて空にもできるし、「@h{@a} = ( (1) x ($#a+1));」などとすれば1が全ての値となる。もちろん別の配列(リスト)を持ってきても良い。
]]>
    </content>
</entry>
<entry>
    <title>配列の要素数を調べる</title>
    <link rel="alternate" type="text/html" href="http://katsubemakito.net/cgiperl/variable/array/post-58.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://katsubemakito.net/mt/mt-atom.cgi/weblog/blog_id=5/entry_id=636" title="配列の要素数を調べる" />
    <id>tag:katsubemakito.net,2007:/cgiperl//5.636</id>
    
    <published>2007-05-27T16:56:14Z</published>
    <updated>2007-06-16T16:19:38Z</updated>
    
    <summary>配列に今どれだけの要素が詰まっているかカウントしたい。これには大きく二つの方法が...</summary>
    <author>
        <name>かつべ</name>
        <uri>http://katsubemakito.net</uri>
    </author>
            <category term="リスト(配列)" />
    
    <content type="html" xml:lang="ja" xml:base="http://katsubemakito.net/cgiperl/">
        <![CDATA[配列に今どれだけの要素が詰まっているかカウントしたい。これには大きく二つの方法が用意されている。<br />]]>
        <![CDATA[<p>「$#配列名」とする方法と、スカラー値として値を得る方法の二つがある。前者と後者で得られる値が違う点に注意すること。「$#配列名」は配列のインデックス(添え字)に忠実で、「最大数 - 1」の結果が返ってくるのに対し、後者は最大数がそのまま返ってくる。<br /><br />
</p>

<div class="code"><tt><pre><pre><span class="synPreProc">#!/usr/bin/perl</span>

;<span class="synComment">#</span>
;<span class="synComment">#配列の要素数を表示</span>
;<span class="synComment">#</span>

<span class="synComment">#---------------------------------------#</span>
<span class="synComment">#準備</span>
<span class="synComment">#---------------------------------------#</span>
<span class="synIdentifier">@array</span> = (<span class="synConstant">1.</span>.<span class="synConstant">5</span>);   <span class="synComment">#1～5の値を入れる</span>

<span class="synComment">#---------------------------------------#</span>
<span class="synComment">#表示</span>
<span class="synComment">#---------------------------------------#</span>
<span class="synComment">#-- $#配列名 --#</span>
<span class="synStatement">print</span> <span class="synIdentifier">$#array</span>, <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;

<span class="synComment">#-- スカラー変数として処理 --#</span>
<span class="synIdentifier">$count</span> = <span class="synIdentifier">@array</span>;
<span class="synStatement">print</span> <span class="synIdentifier">$count</span>, <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;

<span class="synComment">#-- scalar関数を使うことでも上と同じ意味に --#</span>
<span class="synStatement">print</span> <span class="synStatement">scalar</span>(<span class="synIdentifier">@array</span>), <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;</pre></tt></div><br />
<br />

○実行結果<br />
<div class="code">4<br />
5<br />
5</div>
<br />
<br />
次のようにすることで配列の最後の要素を得ることが出来る。<br />
<div class="code">$array[$#array];</div>
]]>
    </content>
</entry>
<entry>
    <title>配列を結合(連結)する</title>
    <link rel="alternate" type="text/html" href="http://katsubemakito.net/cgiperl/variable/array/post-57.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://katsubemakito.net/mt/mt-atom.cgi/weblog/blog_id=5/entry_id=635" title="配列を結合(連結)する" />
    <id>tag:katsubemakito.net,2007:/cgiperl//5.635</id>
    
    <published>2007-05-27T16:55:00Z</published>
    <updated>2007-06-16T16:19:38Z</updated>
    
    <summary>二つの配列を結合(連結)し、合体させたい。 ...</summary>
    <author>
        <name>かつべ</name>
        <uri>http://katsubemakito.net</uri>
    </author>
            <category term="リスト(配列)" />
    
    <content type="html" xml:lang="ja" xml:base="http://katsubemakito.net/cgiperl/">
        <![CDATA[二つの配列を結合(連結)し、合体させたい。<br />
<br />
]]>
        <![CDATA[pushとunshiftはリスト(配列)を渡せるのでそれを利用するのが良い。<br />
<br />
<div class="code"><tt><pre><span class="synPreProc">#!/usr/bin/perl</span>

;<span class="synComment">#</span>
;<span class="synComment">#配列の結合</span>
;<span class="synComment">#</span>

<span class="synComment">#----------------------------------#</span>
<span class="synComment">#配列の準備</span>
<span class="synComment">#----------------------------------#</span>
<span class="synStatement">my</span> <span class="synIdentifier">@array_a</span> = (<span class="synConstant">1.</span>.<span class="synConstant">5</span>);     <span class="synComment">#1～5の値を入れる</span>
<span class="synStatement">my</span> <span class="synIdentifier">@array_b</span> = (a..e);     <span class="synComment">#a～eの値を入れる</span>
<span class="synStatement">my</span> <span class="synIdentifier">@array_c</span> = (A..E);     <span class="synComment">#A～Eの値を入れる</span>

<span class="synComment">#----------------------------------#</span>
<span class="synComment">#合体</span>
<span class="synComment">#----------------------------------#</span>
<span class="synComment">#-- 前に結合 --#</span>
<span class="synStatement">unshift</span>(<span class="synIdentifier">@array_a</span>, <span class="synIdentifier">@array_b</span>);    <span class="synComment">#a,b,c,d,e,1,2,3,4,5</span>

<span class="synComment">#-- 後ろ結合 --#</span>
<span class="synStatement">push</span>(<span class="synIdentifier">@array_a</span>, <span class="synIdentifier">@array_c</span>);       <span class="synComment">#a,b,c,d,e,1,2,3,4,5,A,B,C,D,E</span>

<span class="synComment">#----------------------------------#</span>
<span class="synComment">#表示</span>
<span class="synComment">#----------------------------------#</span>
<span class="synStatement">print</span> <span class="synConstant">"</span><span class="synIdentifier">$_</span><span class="synSpecial">\n</span><span class="synConstant">"</span> <span class="synStatement">foreach</span>(<span class="synIdentifier">@array_a</span>);</pre></tt></div>
<br />
<br />
○実行結果
<div class="code">a<br />
b<br />
c<br />
d<br />
e<br />
1<br />
2<br />
3<br />
4<br />
5<br />
A<br />
B<br />
C<br />
D<br />
E</div>
<br />
<br />
もしくは次のように代入する手もある。<br />
<br />
<div class="code"><tt><pre><span class="synComment">#-- 準備 --#</span>
<span class="synIdentifier">@array_a</span> = (<span class="synConstant">1.</span>.<span class="synConstant">5</span>);   <span class="synComment">#1～5の値を入れる</span>
<span class="synIdentifier">@array_b</span> = (a..e);   <span class="synComment">#a～eの値を入れる</span>

<span class="synComment">#-- 合体 --#</span>
<span class="synIdentifier">@array</span> = (<span class="synIdentifier">@array_a</span>, <span class="synIdentifier">@array_b</span>);</pre></tt></div>

]]>
    </content>
</entry>
<entry>
    <title>配列をコピーする</title>
    <link rel="alternate" type="text/html" href="http://katsubemakito.net/cgiperl/variable/array/post-56.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://katsubemakito.net/mt/mt-atom.cgi/weblog/blog_id=5/entry_id=634" title="配列をコピーする" />
    <id>tag:katsubemakito.net,2007:/cgiperl//5.634</id>
    
    <published>2007-05-27T16:54:15Z</published>
    <updated>2007-06-01T15:39:32Z</updated>
    
    <summary>配列Aの内容を配列Bにそのままコピーしたいが、どうすれば良いだろうか？ ...</summary>
    <author>
        <name>かつべ</name>
        <uri>http://katsubemakito.net</uri>
    </author>
            <category term="リスト(配列)" />
    
    <content type="html" xml:lang="ja" xml:base="http://katsubemakito.net/cgiperl/">
        <![CDATA[配列Aの内容を配列Bにそのままコピーしたいが、どうすれば良いだろうか？<br />
<br />]]>
        <![CDATA[単純に代入をしてやれば良い。<br />
コピー先の配列に値が入っていた場合でもすべて上書きされてしまうので注意すること。もし<a href="http://katsubemakito.net/cgiperl/variable/array/push-unshift.html">配列の前か後ろに挿入したいのならpop,unshiftを用いる。</a><br />
<br />
<div class="code"><tt><pre><span class="synPreProc">#!/usr/bin/perl</span>

;<span class="synComment">#</span>
;<span class="synComment">#配列のコピー</span>
;<span class="synComment">#</span>

<span class="synStatement">use strict</span>;

<span class="synComment">#----------------------------------#</span>
<span class="synComment">#配列の準備</span>
<span class="synComment">#----------------------------------#</span>
<span class="synStatement">my</span> <span class="synIdentifier">@array_from</span> = (<span class="synConstant">1.</span>.<span class="synConstant">10</span>);       <span class="synComment">#1～10の値を入れる</span>
<span class="synStatement">my</span> <span class="synIdentifier">@array_to</span>   = ();            <span class="synComment">#空の配列</span>

<span class="synComment">#----------------------------------#</span>
<span class="synComment">#コピー</span>
<span class="synComment">#----------------------------------#</span>
<span class="synComment">#-- fromの内容をtoにコピー --#</span>
<span class="synIdentifier">@array_to</span> = <span class="synIdentifier">@array_from</span>;

<span class="synComment">#----------------------------------#</span>
<span class="synComment">#表示</span>
<span class="synComment">#----------------------------------#</span>
<span class="synStatement">print</span> <span class="synConstant">"</span><span class="synIdentifier">$_</span><span class="synSpecial">\n</span><span class="synConstant">"</span> <span class="synStatement">foreach</span>(<span class="synIdentifier">@array_to</span>);</pre></tt></div>
<br />
<br />
○実行結果<br />
<div class="code">1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9<br />
10</div>]]>
    </content>
</entry>
<entry>
    <title>配列の一部を置換する(splice)</title>
    <link rel="alternate" type="text/html" href="http://katsubemakito.net/cgiperl/variable/array/splice.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://katsubemakito.net/mt/mt-atom.cgi/weblog/blog_id=5/entry_id=633" title="配列の一部を置換する(splice)" />
    <id>tag:katsubemakito.net,2007:/cgiperl//5.633</id>
    
    <published>2007-05-26T05:11:22Z</published>
    <updated>2007-06-01T17:00:43Z</updated>
    
    <summary>配列の一部だけを簡単に置換してくれる関数がspliceである。...</summary>
    <author>
        <name>かつべ</name>
        <uri>http://katsubemakito.net</uri>
    </author>
            <category term="リスト(配列)" />
    
    <content type="html" xml:lang="ja" xml:base="http://katsubemakito.net/cgiperl/">
        <![CDATA[配列の一部だけを簡単に置換してくれる関数が<strong>splice</strong>である。<br />]]>
        <![CDATA[<p>
spliceは非常に柔軟であるがために最初はかなりとっつきにくい。その反面、まとめて配列の操作をしたくなった際には心強い味方になってくれる。引数の数によって動作がかなり変わるのでその点をしっかりと押さえておきたい。<br />
</p>

<div class="code"><tt><pre><span class="synPreProc">#!/usr/bin/perl</span>

;<span class="synComment">#</span>
;<span class="synComment">#spliceの練習</span>
;<span class="synComment">#</span>

<span class="synComment">#-----------------------------#</span>
<span class="synComment">#削除</span>
<span class="synComment">#-----------------------------#</span>
<span class="synIdentifier">@array</span> = (<span class="synConstant">1.</span>.<span class="synConstant">5</span>);
<span class="synStatement">splice</span>(<span class="synIdentifier">@array</span>, <span class="synConstant">3</span>);      <span class="synComment">#$array[3] ～ $array[$#array]を削除</span>

  <span class="synComment">#○実行結果</span>
  <span class="synComment">#  @array =&gt; (1,2);</span>


<span class="synComment">#-----------------------------#</span>
<span class="synComment">#削除(指定箇所)</span>
<span class="synComment">#-----------------------------#</span>
<span class="synIdentifier">@array</span> = (<span class="synConstant">1.</span>.<span class="synConstant">5</span>);
<span class="synStatement">splice</span>(<span class="synIdentifier">@array</span>, <span class="synConstant">1</span>, <span class="synConstant">3</span>);   <span class="synComment">#$array[1] ～ $array[3]を削除</span>

  <span class="synComment">#○実行結果</span>
  <span class="synComment">#  @array =&gt; (1,5);</span>


<span class="synComment">#-----------------------------#</span>
<span class="synComment">#置換(削除あり)</span>
<span class="synComment">#-----------------------------#</span>
<span class="synIdentifier">@array</span> = (<span class="synConstant">1.</span>.<span class="synConstant">5</span>);
<span class="synIdentifier">@list</span>  = (a..c);
<span class="synStatement">splice</span>(<span class="synIdentifier">@array</span>, <span class="synConstant">1</span>, <span class="synConstant">3</span>, <span class="synIdentifier">@list</span>);   <span class="synComment">#$array[1] ～ $array[3]を削除し、</span>
                                <span class="synComment">#$array[1]の部分から@listを入れる</span>

  <span class="synComment">#○実行結果</span>
  <span class="synComment">#  @array =&gt; (1,a,b,c,5);</span>


<span class="synComment">#-----------------------------#</span>
<span class="synComment">#置換(削除なし)</span>
<span class="synComment">#-----------------------------#</span>
<span class="synIdentifier">@array</span> = (<span class="synConstant">1.</span>.<span class="synConstant">5</span>);
<span class="synIdentifier">@list</span>  = (a..c);
<span class="synStatement">splice</span>(<span class="synIdentifier">@array</span>, <span class="synConstant">1</span>, <span class="synConstant">0</span>, <span class="synIdentifier">@list</span>); <span class="synComment">#$array[1]の部分から@listを入れる</span>

  <span class="synComment">#○実行結果</span>
  <span class="synComment">#  @array =&gt; (1,a,b,c,2,3,4,5);</span>
</pre></tt></div>
<br />
<br />

ちなみに以下に示す、左右の式はいずれも同じ意味を持つ。<br />
<div class="code"><tt><pre><span class="synStatement">push</span>(<span class="synIdentifier">@a</span>,<span class="synIdentifier">$x</span>,<span class="synIdentifier">$y</span>)	        <span class="synStatement">splice</span>(<span class="synIdentifier">@a</span>,<span class="synIdentifier">$#a</span><span class="synConstant">+1</span>,<span class="synConstant">0</span>,<span class="synIdentifier">$x</span>,<span class="synIdentifier">$y</span>)
<span class="synStatement">pop</span>(<span class="synIdentifier">@a</span>)                <span class="synStatement">splice</span>(<span class="synIdentifier">@a</span>,<span class="synConstant">-1</span>)
<span class="synStatement">shift</span>(<span class="synIdentifier">@a</span>)              <span class="synStatement">splice</span>(<span class="synIdentifier">@a</span>,<span class="synConstant">0</span>,<span class="synConstant">1</span>)
<span class="synStatement">unshift</span>(<span class="synIdentifier">@a</span>,<span class="synIdentifier">$x</span>,<span class="synIdentifier">$y</span>)      <span class="synStatement">splice</span>(<span class="synIdentifier">@a</span>,<span class="synConstant">0</span>,<span class="synConstant">0</span>,<span class="synIdentifier">$x</span>,<span class="synIdentifier">$y</span>)
<span class="synIdentifier">$a</span>[<span class="synIdentifier">$x</span>] = <span class="synIdentifier">$y</span>            <span class="synStatement">splice</span>(<span class="synIdentifier">@a</span>,<span class="synIdentifier">$x</span>,<span class="synConstant">1</span>,<span class="synIdentifier">$y</span>);
</pre></tt></div>
～perldocより引用～]]>
    </content>
</entry>
<entry>
    <title>リスト(配列)を逆順に並べ替える (reverse)</title>
    <link rel="alternate" type="text/html" href="http://katsubemakito.net/cgiperl/variable/array/-reverse.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://katsubemakito.net/mt/mt-atom.cgi/weblog/blog_id=5/entry_id=632" title="リスト(配列)を逆順に並べ替える (reverse)" />
    <id>tag:katsubemakito.net,2007:/cgiperl//5.632</id>
    
    <published>2007-05-26T05:10:05Z</published>
    <updated>2007-05-27T16:42:23Z</updated>
    
    <summary>リスト(配列)を逆に並べ替えるお手軽な方法はreverseを用いることだ。 ...</summary>
    <author>
        <name>かつべ</name>
        <uri>http://katsubemakito.net</uri>
    </author>
            <category term="リスト(配列)" />
    
    <content type="html" xml:lang="ja" xml:base="http://katsubemakito.net/cgiperl/">
        <![CDATA[リスト(配列)を逆に並べ替えるお手軽な方法は<strong>reverse</strong>を用いることだ。
]]>
        <![CDATA[<div class="code"><tt><pre>;<span class="synComment">#</span>
;<span class="synComment">#配列を逆順にする</span>
;<span class="synComment">#</span>

<span class="synStatement">use strict</span>;

<span class="synComment">#--------------------------#</span>
<span class="synComment">#       配列を初期化       #</span>
<span class="synComment">#--------------------------#</span>
<span class="synStatement">my</span> <span class="synIdentifier">@array</span> = (<span class="synConstant">3</span>,<span class="synConstant">4</span>,<span class="synConstant">1</span>,<span class="synConstant">2</span>,<span class="synConstant">5</span>);       <span class="synComment">#でたらめ</span>

<span class="synComment">#--------------------------#</span>
<span class="synComment">#        逆転して表示      #</span>
<span class="synComment">#--------------------------#</span>
<span class="synStatement">print</span> <span class="synConstant">"■通常表示</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
<span class="synStatement">print</span> <span class="synConstant">"</span><span class="synIdentifier">$_</span><span class="synSpecial">\n</span><span class="synConstant">"</span> <span class="synStatement">foreach</span>( <span class="synIdentifier">@array</span> );

<span class="synStatement">print</span> <span class="synConstant">"■逆転表示</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
<span class="synStatement">print</span> <span class="synConstant">"</span><span class="synIdentifier">$_</span><span class="synSpecial">\n</span><span class="synConstant">"</span> <span class="synStatement">foreach</span>( <span class="synStatement">reverse</span> <span class="synIdentifier">@array</span> );

<span class="synStatement">print</span> <span class="synConstant">"■逆転表示(ソート含み)</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
<span class="synStatement">print</span> <span class="synConstant">"</span><span class="synIdentifier">$_</span><span class="synSpecial">\n</span><span class="synConstant">"</span> <span class="synStatement">foreach</span>( <span class="synStatement">reverse</span> <span class="synStatement">sort</span> <span class="synIdentifier">@array</span> );  <span class="synComment">#並べ替えるのはsort</span>
</pre></tt></div>
<br />
<br />
○実行結果<br />
<div class="code">■通常<br />
3<br />
4<br />
1<br />
2<br />
5<br />
<br />
■逆転<br />
5<br />
2<br />
1<br />
4<br />
3<br />
<br />
■逆転(整頓含み)<br />
5<br />
4<br />
3<br />
2<br />
1</div>
<br />
<br />
]]>
    </content>
</entry>
<entry>
    <title>配列に値を追加する(push, unshift)</title>
    <link rel="alternate" type="text/html" href="http://katsubemakito.net/cgiperl/variable/array/push-unshift.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://katsubemakito.net/mt/mt-atom.cgi/weblog/blog_id=5/entry_id=631" title="配列に値を追加する(push, unshift)" />
    <id>tag:katsubemakito.net,2007:/cgiperl//5.631</id>
    
    <published>2007-05-26T05:03:10Z</published>
    <updated>2007-05-27T16:31:37Z</updated>
    
    <summary>配列の先頭、または末尾から値を追加するにはpush、unshiftを用いれば良い...</summary>
    <author>
        <name>かつべ</name>
        <uri>http://katsubemakito.net</uri>
    </author>
            <category term="リスト(配列)" />
    
    <content type="html" xml:lang="ja" xml:base="http://katsubemakito.net/cgiperl/">
        <![CDATA[配列の先頭、または末尾から値を追加するには<strong>push</strong>、<strong>unshift</strong>を用いれば良い。
]]>
        <![CDATA[先頭への追加は<strong>unshift</strong>、最後に追加するのは<strong>push</strong>を用いる。<br /><br />

<div class="code"><tt><pre>;<span class="synComment">#</span>
;<span class="synComment">#配列へ値を追加する</span>
;<span class="synComment">#</span>

<span class="synStatement">use strict</span>;

<span class="synComment">#--------------------------#</span>
<span class="synComment">#       配列を初期化       #</span>
<span class="synComment">#--------------------------#</span>
<span class="synStatement">my</span> <span class="synIdentifier">@array</span> = (<span class="synConstant">1.</span>.<span class="synConstant">5</span>);

<span class="synComment">#--------------------------#</span>
<span class="synComment">#       値を追加する       #</span>
<span class="synComment">#--------------------------#</span>
<span class="synComment">#-- 先頭に追加する --#</span>
<span class="synStatement">unshift</span>(<span class="synIdentifier">@array</span>, <span class="synConstant">100</span>);

<span class="synComment">#-- 末尾に追加する --#</span>
<span class="synStatement">push</span>(<span class="synIdentifier">@array</span>, <span class="synConstant">500</span>);


<span class="synComment">#--------------------------#</span>
<span class="synComment">#      実行後の配列は？    #</span>
<span class="synComment">#--------------------------#</span>
<span class="synStatement">print</span> <span class="synConstant">"</span><span class="synIdentifier">$_</span><span class="synSpecial">\n</span><span class="synConstant">"</span> <span class="synStatement">foreach</span>(<span class="synIdentifier">@array</span>);
</pre></tt></div>
<br />
<br />

○実行結果<br />
<div class="code">100<br />
1<br />
2<br />
3<br />
4<br />
5<br />
500</div>]]>
    </content>
</entry>
<entry>
    <title>配列から値を取り出す(pop, shift)</title>
    <link rel="alternate" type="text/html" href="http://katsubemakito.net/cgiperl/variable/array/pop-shift.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://katsubemakito.net/mt/mt-atom.cgi/weblog/blog_id=5/entry_id=630" title="配列から値を取り出す(pop, shift)" />
    <id>tag:katsubemakito.net,2007:/cgiperl//5.630</id>
    
    <published>2007-05-26T05:00:17Z</published>
    <updated>2007-05-27T16:22:28Z</updated>
    
    <summary>配列の先頭、または末尾から値を取り出すにはpop, shiftを用いれば良い。 ...</summary>
    <author>
        <name>かつべ</name>
        <uri>http://katsubemakito.net</uri>
    </author>
            <category term="リスト(配列)" />
    
    <content type="html" xml:lang="ja" xml:base="http://katsubemakito.net/cgiperl/">
        <![CDATA[配列の先頭、または末尾から値を取り出すには<strong>pop</strong>, <strong>shift</strong>を用いれば良い。
]]>
        <![CDATA[先頭から取り出す時は「shift」、末尾から取り出す時は「pop」を用いる。注意する点としては、取り出した後その値は配列から取り除かれる(削除される)。なお配列を指定しないと「@_」が自動的に用いられる。<br /><br />

<div class="code"><tt><pre>;<span class="synComment">#</span>
;<span class="synComment">#配列から値を取り出す。</span>
;<span class="synComment">#</span>

<span class="synStatement">use strict</span>;

<span class="synComment">#--------------------------#</span>
<span class="synComment">#       配列を初期化       #</span>
<span class="synComment">#--------------------------#</span>
<span class="synStatement">my</span> <span class="synIdentifier">@array</span> = (<span class="synConstant">1.</span>.<span class="synConstant">5</span>);

<span class="synComment">#--------------------------#</span>
<span class="synComment">#       値を取り出す       #</span>
<span class="synComment">#--------------------------#</span>
<span class="synComment">#-- 先頭から取り出す --#</span>
<span class="synStatement">print</span> <span class="synStatement">shift</span>(<span class="synIdentifier">@array</span>), <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;

<span class="synComment">#-- 末尾から取り出す --#</span>
<span class="synStatement">print</span> <span class="synStatement">pop</span>(<span class="synIdentifier">@array</span>), <span class="synConstant">"</span><span class="synSpecial">\n\n</span><span class="synConstant">"</span>;


<span class="synComment">#--------------------------#</span>
<span class="synComment">#      実行後の配列は？    #</span>
<span class="synComment">#--------------------------#</span>
<span class="synStatement">print</span> <span class="synConstant">"</span><span class="synIdentifier">$_</span><span class="synSpecial">\n</span><span class="synConstant">"</span> <span class="synStatement">foreach</span>(<span class="synIdentifier">@array</span>);
</pre></tt></div>
<br />
<br />

○実行結果<br />
<div class="code">1<br />
5<br />
<br />
2<br />
3<br />
4<br />
</div>
]]>
    </content>
</entry>
<entry>
    <title>配列を初期化する</title>
    <link rel="alternate" type="text/html" href="http://katsubemakito.net/cgiperl/variable/array/post-55.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://katsubemakito.net/mt/mt-atom.cgi/weblog/blog_id=5/entry_id=629" title="配列を初期化する" />
    <id>tag:katsubemakito.net,2007:/cgiperl//5.629</id>
    
    <published>2007-05-26T04:59:44Z</published>
    <updated>2007-05-27T16:11:21Z</updated>
    
    <summary>配列を初期化するにはいくつかの方法がある。 ...</summary>
    <author>
        <name>かつべ</name>
        <uri>http://katsubemakito.net</uri>
    </author>
            <category term="リスト(配列)" />
    
    <content type="html" xml:lang="ja" xml:base="http://katsubemakito.net/cgiperl/">
        配列を初期化するにはいくつかの方法がある。

        <![CDATA[ここでは代表的な方法を示す。<br /><br />

<div class="code"><tt><pre>;<span class="synComment">#</span>
;<span class="synComment">#配列を初期化する</span>
;<span class="synComment">#</span>

<span class="synStatement">use strict</span>;

<span class="synComment">#--------------------------#</span>
<span class="synComment">#       まとめて初期化     #</span>
<span class="synComment">#--------------------------#</span>
<span class="synStatement">my</span> <span class="synIdentifier">@array</span> = (<span class="synConstant">1.</span>.<span class="synConstant">5</span>);

<span class="synComment">#--------------------------#</span>
<span class="synComment">#       個別に初期化       #</span>
<span class="synComment">#--------------------------#</span>
<span class="synIdentifier">$array</span>[<span class="synConstant">0</span>] = <span class="synConstant">1</span>;
<span class="synIdentifier">$array</span>[<span class="synConstant">1</span>] = <span class="synConstant">2</span>;
<span class="synIdentifier">$array</span>[<span class="synConstant">2</span>] = <span class="synConstant">3</span>;
<span class="synIdentifier">$array</span>[<span class="synConstant">3</span>] = <span class="synConstant">4</span>;
<span class="synIdentifier">$array</span>[<span class="synConstant">4</span>] = <span class="synConstant">5</span>;


<span class="synComment">#--------------------------#</span>
<span class="synComment">#          無名配列        #</span>
<span class="synComment">#--------------------------#</span>
<span class="synStatement">my</span> <span class="synIdentifier">$array</span> = [<span class="synConstant">1.</span>.<span class="synConstant">5</span>];

<span class="synComment">#-- こんな感じでアクセスする --#</span>
<span class="synStatement">foreach</span>( <span class="synIdentifier">@$array</span> ){
	<span class="synStatement">print</span> <span class="synIdentifier">$_</span>, <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
}

<span class="synStatement">print</span> <span class="synIdentifier">$array</span>-&gt;[<span class="synConstant">0</span>], <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
<span class="synStatement">print</span> <span class="synIdentifier">$array</span>-&gt;[<span class="synConstant">1</span>], <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
<span class="synStatement">print</span> <span class="synIdentifier">$array</span>-&gt;[<span class="synConstant">2</span>], <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
<span class="synStatement">print</span> <span class="synIdentifier">$array</span>-&gt;[<span class="synConstant">3</span>], <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
<span class="synStatement">print</span> <span class="synIdentifier">$array</span>-&gt;[<span class="synConstant">4</span>], <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>;
</pre></tt></div>


]]>
    </content>
</entry>

</feed> 


