Как получить размер файла в мегабайтах с помощью Perl?

Я думаю, что когда вы определяете String, вы определяете объект. Поэтому вам нужно использовать .equals(). Когда вы используете примитивные типы данных, вы используете ==, но с String (и любым объектом) вы должны использовать .equals().

13
задан Perleone 28 November 2012 в 12:03
поделиться

7 ответов

Если требуется избежать магических чисел, попробуйте модуль CPAN Число:: Байты:: Человек .

use Number::Bytes::Human qw(format_bytes);
my $size = format_bytes(-s $file); # 4.5M
30
ответ дан jrockway 28 November 2012 в 23:03
поделиться

Вы могли, конечно, создать функцию для вычисления этого. Это - лучшее решение, чем создание констант в этом экземпляре.

sub size_in_mb {
    my $size_in_bytes = shift;
    return $size_in_bytes / (1024 * 1024);
}

Никакая потребность в константах. Изменение 1024 к некоторому переменному/постоянному не сделает этот код более читаемым.

6
ответ дан Peter Stuifzand 28 November 2012 в 23:03
поделиться

Ну, нет 1 024 байтов в meg, существует 1 024 байта в K и 1024 K в meg...

Тем не менее 1024 безопасное "волшебное" число, которое никогда не будет изменяться ни в какой системе, в которой можно ожидать, что программа будет работать.

4
ответ дан user54650 28 November 2012 в 23:03
поделиться
  • 1
    Это только работает, если index.html действительно обращается к js сценарию, Вы обновили. – Kood 7 March 2014 в 22:02

Я считал бы это в переменную, а не использовал бы магическое число. Даже если магические числа не собираются изменяться, как число байтов в мегабайте, использование хорошо именованной константы является хорошей практикой, потому что это делает Ваш код более читаемым. Это сразу делает его очевидным для всех других, каково Ваше намерение.

4
ответ дан Doug R 28 November 2012 в 23:03
поделиться
  • 1
    @Raanan I' m использование iPad и I' m находящий, что, даже изменяя файл HTML doesn' t имеют значение. Я попробовал много раз и снова. Единственная вещь, которая заставила его обновляться, состояла в том, чтобы удалить его от моей домашней страницы, тогда добавляют его снова от сафари. Возможно, это предложение имело бы значение, но на моем appserver (grunt-contrib-connect) я couldn' t правильно загружают файлы, когда я добавил ?&v=1 до конца. – Daniel Kaplan 9 October 2013 в 13:09

1) Вы не хотите 1024. Это дает Вам килобайты. Вы хотите 1024*1024, или 1048576.

2), Почему был бы, делясь на магическое число быть плохой идеей? Это не похоже на число байтов в мегабайте, будет когда-либо изменяться. Не сверхдумайте вещи слишком много.

1
ответ дан Chris Lutz 28 November 2012 в 23:03
поделиться
  • 1
    Не работает на меня. Мои обновления CSS не получены. – Aristoteles 14 March 2013 в 20:56

Не понимайте меня превратно, но: Я думаю, что объявление 1024 как Волшебная Переменная немного заходит слишком далеко, это немного похоже "на $ONE = 1; $TWO = 2"; и т.д.

Килобайт А был ложно объявлен как 1 024 байта больше чем с 20 лет, и я серьезно сомневаюсь, что производители операционной системы будут когда-либо исправлять ту ошибку и изменять ее на 1 000.

, Что могло иметь смысл, хотя должен объявить неочевидный материал, как "$megabyte = 1024 * 1024", так как это более читаемо, чем 1048576.

1
ответ дан Michael Stum 28 November 2012 в 23:03
поделиться

Так как-s оператор возвращает размер файла в байтах, необходимо, вероятно, делать что-то как

my $size_in_mb = (-s $fh) / (1024 * 1024);

и использовать интервал () при необходимости в круглом числе. Это не похоже на размеры КБ, или МБ собирается измениться в любое время в ближайшем будущем :)

1
ответ дан aks 28 November 2012 в 23:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: