Команда Perl bash в цикле while выдает чушь

Hello stackpeople!

Мне нужно решить 2 задачи и отобразить результаты в онлайн-формате в виде cgi-файла.

A) получить все имена папок по заданному пути

B) определить возраст index.html внутри каждой папки

результат должен выглядеть следующим образом:

[Номер] [Имя папки] [файл]

Эта cgi-страница работает на сервере Solaris с установленным perl 5.8.4

Мое решение - комбинация bash и perl. Чтобы решить проблему A) (имена папок), я написал сценарий bash:

#!/bin/bash
#
find /test/ -type d | sed -e 's/^.*\///'

Это дает мне хороший список всех имен папок в / test /

Теперь код perl для отображения этого вывода в браузере:

  #Establish a pipeline between the bash and my script.
  my $bash_command = '/test./foldernames.bash';
  open(my $pipe, '-|', $bash_command) or die "Can't open pipe: $!";
  # initialize variables
   my $foldername = "";
   my $i    = 0;

  # Process the output from bash command line by line.
  while (my $line = <$pipe>)
  {
   $foldername = $line;
   $i = $i+1;

   print"  <tr><td>$i</td><td>$foldername</td></tr>";
 }#end while

Это работает! Я получу хороший стол с [Number] и [Foldername]! А теперь самое сложное! Кроме того, мне нужна дата index.html, расположенная в каждой папке. Поэтому у меня есть другой сценарий bash:

ls -ltr /test/folder1/*.html | tail -1 | awk '{printf"%3s %1s %s\n",$6, $7, $8}`

Это дает мне идеальный результат: 22 февраля, 10:56 Теперь мне нужна эта информация в моей таблице. Я добавил эту строку в свой сценарий Perl в цикле while:

$timestamp = `ls -ltr /test/folder1/*.html | tail -1 | awk '{printf"%3s %1s %s\\n",\$6, \$7, \$8}`;

Это отлично работает, когда я добавляю имя папки в виде строки. Как только я обменяю folder1 на $ foldername , я получаю бессмысленную информацию «ls».

Почему это так?

Редактировать: Теперь я использовал:

use File::stat;
use Time::localtime;
my $timestamp = ctime(stat("/test/folder1")->mtime);

Это более безопасно по сравнению с синтаксическим анализом вывода ls. Но у меня все еще есть проблемы с именем $foldername. Я использовал функцию length , чтобы определить длину $ Foldername .

$ foldername имеет длину 7, но вывод строки содержит только 6 символов: помидор

Итак, я пробовал Нарезать / пережевывать имя $ foldername с всегда одним и тем же результатом: 7 символов!

0
задан Ajin 22 February 2012 в 10:55
поделиться