?

Log in

Previous Entry | Next Entry

There's More Than One Brain Dead Way To Do It

або 4 способи зробити одне і те ж на мові богів.

Підозрюю, що справжній гуру міг привести ще з десяток, але залишимо критику на совісті інших.

Отже задача: є скаляр-рядок, потрібно над кожним символом виконати певну операцію (в оригіналі стояло завдання підрахунку статистики літер у тексті). На С чи іншій "звичайній" мові це виглядало б приблизно так (код не претендує на коректність синтаксису):

// опускаємо деталі
int i;
for (i = 0; i < strlen(str); i++) {
    count_letter(s[i]);    // міфічна функція
}


Будь-які логічні шляхи написати щось подібне на Perl було вичерпано впродовж перших півгодини.
Після цього я поліз на http://perldoc.perl.org/ в пошуках функції чи якогось іншого солюшену.
Потім був Гугл. Ну а далі був #perl на irc.freenode.net.

Результат:

1. chop - повертає той символ, що видаляє

use strict;
use warnings;

my $str = $ARGV[0];
my $ch;

while ($ch = chop $str) {
	print $ch . " ";
}
print "\n";



2. substr - повертає підрядок аргументу

use strict;
use warnings;

my $str = $ARGV[0];
my $pos = 0;

while ($pos < length ($str) ) {
    print substr($str, $pos++, 1) . " "
}
print "\n";


3. split - зводимо задачу до відомої

use strict;
use warnings;

my $str = $ARGV[0];

foreach (split('', $str)) {
    print $_ . " ";
}   
print "\n";


4. регекспи. Use the Force, Luke.

use strict;
use warnings;

my $str = $ARGV[0];

while ($str =~ /(.)/g ) {
    print $1 . " ";
}   
print "\n";


5. Був ще 5ий спосіб, який мені порекомендували в IRC #perl тоді, коли посилали мене нафіг. Але я ще не доріс до його розуміння і не зміг запам'ятати той набір символів :). На жаль не зберігся.

Profile

camel
ua_perl
Розробка на мові Perl

Latest Month

червень 2008
S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     
Розроблено LiveJournal.com
Designed by Tiffany Chow