Эмпирическое правило должно использовать функцию большинство подходящее для Ваших потребностей.
, Если Вы просто хотите ключи и не планируете к никогда , читает любое из значений, используют ключи ():
foreach my $key (keys %hash) { ... }
, Если Вы просто хотите значения, используйте значения ():
foreach my $val (values %hash) { ... }
при необходимости в ключах и значения используйте каждого ():
keys %hash; # reset the internal iterator so a prior each() doesn't affect the loop
while(my($k, $v) = each %hash) { ... }
, Если Вы планируете изменить ключи хеша всегда кроме [1 111] для удаления текущего ключа во время повторения, тогда Вы не должны использовать каждого (). Например, этот код для создания нового набора прописных ключей с удвоенными значениями хорошо работает с помощью ключей ():
%h = (a => 1, b => 2);
foreach my $k (keys %h)
{
$h{uc $k} = $h{$k} * 2;
}
создание ожидаемого получающегося хеша:
(a => 1, A => 2, b => 2, B => 4)
, Но использующий каждого (), чтобы сделать то же самое:
%h = (a => 1, b => 2);
keys %h;
while(my($k, $v) = each %h)
{
$h{uc $k} = $h{$k} * 2; # BAD IDEA!
}
приводит к неправильным результатам твердо предсказываемыми способами. Например:
(a => 1, A => 2, b => 2, B => 8)
Это, однако, безопасно:
keys %h;
while(my($k, $v) = each %h)
{
if(...)
{
delete $h{$k}; # This is safe
}
}
Все это описано в документации жемчуга:
% perldoc -f keys
% perldoc -f each
Похоже, что в Silverlight это невозможно. Для связи с MIDI-устройством вам придется использовать методы PInvoke в winmm.dll
, а это (очевидно) невозможно сделать в Silverlight. См .:
http://forums.silverlight.net/forums/t/123673.aspx
Это легко можно сделать в приложении WPF или WinForms. Это также можно сделать в браузере с XBAP, хотя вам потребуются повышенные разрешения для доступа к API winmm
, для чего потребуется сертификат. Вы также можете создавать элементы управления ActiveX с помощью .Net, но я думаю, вам все равно понадобится сертификат для этого, чтобы получить надлежащие разрешения (хотя он может работать только с ужасным диалоговым окном подтверждения безопасности).
Невозможно использовать код .NET непосредственно в Silverlight, поскольку Silverlight имеет другое ядро.
Все классы .NET, на которые вы хотите ссылаться в Silverlight, необходимо перекомпилировать для Silverlight.
Также невозможно получить доступ к базовому оборудованию напрямую, поэтому я боюсь, что вы застряли с XBAP с полным доверием. (вам нужно подписать приложение, и пользователь получит всплывающее окно с запросом разрешения). XBAP предоставляет вам все возможности .NET при работе в браузере. XBAP будет работать в firefox / internet explorer на любом компьютере> xp с установленным .net 3.0.
Надеюсь, это поможет.
Silverlight 3 имеет расширяемый мультимедийный конвейер для аудио и видео. Вы можете процедурно создать свой собственный звук и воспроизвести его. Чтобы реализовать то, что вы хотите, вам придется написать собственный MIDI-синтезатор.